您的位置:首页 > 其它

基于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);

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: