基于Processing的人物八方向移动演示:X,Y,XY同时到达移动
2015-07-01 00:55
316 查看
Robot robot1, robot2, robot3;
void setup(){
size(500, 500);
robot1 = new Robot(100,100,0.5);
robot1.setMuBiao(100 + 48 * 4,100);
robot1.setFangXiang(1);
robot2 = new Robot(100,100,0.5);
robot2.setMuBiao(100,100 + 32 * 4);
robot2.setFangXiang(2);
robot3 = new Robot(100,100,0.5);
robot3.setMuBiao(100 + 48 * 4,100 + 32 * 4);
robot3.setFangXiang(3);
}
void draw(){
robot1.go();
robot2.go();
robot3.go();
ellipse(100,100,10,10);
String t = "人物八方向移动演示:X,Y,XY同时到达移动";
text(t, 120, 30);
}
//地图Tile比例48*32屏幕像素大小的矩形区域,48*32=3:2
class Robot {
float x1, y1;//位置
float x2, y2;//目标
float speed;//速度
float fx;//方向:1:X轴,2:Y轴,3:XY轴
float speed_temp;
public Robot(float _x, float _y, float _s) {
x1 = _x;
y1 = _y;
speed = _s;
}
void setMuBiao(float _x, float _y) {
x2 = _x;
y2 = _y;
}
void setFangXiang(float _f) {
fx = _f;
}
void go() {
if (x2 == x1 && y2 == y1) return;
float dx = x2 - x1;
float dy = y2 - y1;
float dd = sqrt(dx * dx + dy * dy);
if(fx == 1)
speed_temp = speed * 3;
if(fx == 2)
speed_temp = speed * 2;
if(fx == 3)
speed_temp = speed * sqrt(2*2+3*3);
//println(speed_temp);
if (dd < speed_temp){
x1 = x2;
y1 = y2;
}else{
x1 += dx * (speed_temp / dd);
y1 += dy * (speed_temp / dd);
}
ellipse(x1,y1,50,50);
ellipse(x1,y1,1,1);
}
}
void setup(){
size(500, 500);
robot1 = new Robot(100,100,0.5);
robot1.setMuBiao(100 + 48 * 4,100);
robot1.setFangXiang(1);
robot2 = new Robot(100,100,0.5);
robot2.setMuBiao(100,100 + 32 * 4);
robot2.setFangXiang(2);
robot3 = new Robot(100,100,0.5);
robot3.setMuBiao(100 + 48 * 4,100 + 32 * 4);
robot3.setFangXiang(3);
}
void draw(){
robot1.go();
robot2.go();
robot3.go();
ellipse(100,100,10,10);
String t = "人物八方向移动演示:X,Y,XY同时到达移动";
text(t, 120, 30);
}
//地图Tile比例48*32屏幕像素大小的矩形区域,48*32=3:2
class Robot {
float x1, y1;//位置
float x2, y2;//目标
float speed;//速度
float fx;//方向:1:X轴,2:Y轴,3:XY轴
float speed_temp;
public Robot(float _x, float _y, float _s) {
x1 = _x;
y1 = _y;
speed = _s;
}
void setMuBiao(float _x, float _y) {
x2 = _x;
y2 = _y;
}
void setFangXiang(float _f) {
fx = _f;
}
void go() {
if (x2 == x1 && y2 == y1) return;
float dx = x2 - x1;
float dy = y2 - y1;
float dd = sqrt(dx * dx + dy * dy);
if(fx == 1)
speed_temp = speed * 3;
if(fx == 2)
speed_temp = speed * 2;
if(fx == 3)
speed_temp = speed * sqrt(2*2+3*3);
//println(speed_temp);
if (dd < speed_temp){
x1 = x2;
y1 = y2;
}else{
x1 += dx * (speed_temp / dd);
y1 += dy * (speed_temp / dd);
}
ellipse(x1,y1,50,50);
ellipse(x1,y1,1,1);
}
}
相关文章推荐
- 黑马程序员——C语言基础学习(一)---C语言中的基本概念总结
- 为什么JDK中String类的indexof不使用KMP或者Boyer-Moore等时间复杂度低的算法编辑器
- Linux多线程编程(一)---多线程基本编程
- aop切面编程
- [转]ERROR ORA-28002: the password will expire within 7 days 解决方法
- LeetCode_Stack_Simplify Path
- 深入 Java 调试体系: 第 1 部分,JPDA 体系概览
- 黑马程序员——Java基础---集合(一)
- RS485总线典型电路介绍
- 【JavaScript设计模式阅读笔记】单例模式
- flexpaper滚动的时候禁止浏览器滚动
- Site.ForProductsOfApple
- 安装VisiBroker出现This Application has Unexpectedly Quit
- Redis 笔记与总结8 PHP + Redis 信息管理系统(分页+好友关注)
- 智力题(第六集)
- 深入学习Broadcast
- 深入学习Broadcast 2015-07-01 00:39 6人阅读 评论(0) 收藏
- 结构体输入输出-指针
- LeetCode_Stack_Evaluate Reverse Polish Notation
- 在部署有OGG的数据库主机上打数据库patch遇到的问题libclntsh.so.11.1 active