📄 advancedbody.java
字号:
package samples.advancedbody;
import AIplatform.event.*;
import AIplatform.robot.*;
import java.awt.geom.Point2D;
/**
*-----------------------------------------------------------------
* @author:iiley (iiley@hotmail.com)
* http://www.robochina.org
* 一个提供moveTo(x,y)方法的车身类
* 使用此车身的时候,必须每个单位事件都调用work()方法,否则,机器人将不能正常运动
* 此车身设计比较简单,机器人只能前进到达目标点,而且行动不很精确,所以在判断机器人是否到大目标点的时候
* 当距离目标点比较近的时候就视为到达,可以参照MoveTo机器人的用法
*/
public class AdvancedBody extends Body
{
private Point2D.Double destination;
public AdvancedBody(Robot robot){
super(robot);
}
/**
* 必须每个单位事件都调用此方法,让机器人时时调整运动
*/
public void work(){
if (destination==null)
{
return;
}
double turnAngle=Util.standardAngle(Math.atan2(destination.y-getY(),destination.x-getX())-getHeading());
turn(turnAngle);
if(Math.abs(turnAngle)>Math.toRadians(45d)){
move(0d);
}else{
double distance=destination.distance(getX(),getY());
if(distance<12 && getVelocity()>7d || distance<2d){
move(0d);
turn(0d);
}
move(Math.min(8d,distance));
}
}
/**
* 设置运动目标点
*/
public void moveTo(double x,double y){
destination = new Point2D.Double(x,y);
}
/**
* 得到当前距目标点的距离
*/
public double getDistance(){
if(destination==null)
return 0d;
else
return destination.distance(getX(),getY());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -