有没有一种方法可以通过Java处理检查一个方法是否优于另一个方法?
我正在创建一个初级游戏,需要在DrawBarriend和drawRocketShip方法之间实现碰撞检测。我需要检查一个方法是否创建了与另一个方法重叠的图像。由于我采用了一些随机化和位置相似性检查,这些检查没有被分成不同的类,为了简洁起见,这些检查被省略了。如果需要的话,我可以进一步阐述,但我认为一开始不一定需要有没有一种方法可以通过Java处理检查一个方法是否优于另一个方法?,java,processing,Java,Processing,我正在创建一个初级游戏,需要在DrawBarriend和drawRocketShip方法之间实现碰撞检测。我需要检查一个方法是否创建了与另一个方法重叠的图像。由于我采用了一些随机化和位置相似性检查,这些检查没有被分成不同的类,为了简洁起见,这些检查被省略了。如果需要的话,我可以进一步阐述,但我认为一开始不一定需要 public class SideScrollGame extends PApplet { // Variables determining motion, window size,
public class SideScrollGame extends PApplet {
// Variables determining motion, window size, etc.
public float rock1;
public float rock2;
public float rock3;
public float rock4;
public float rock5;
public void setup(){
size(width,height);
//rock1 to rock5 are randomized values determining height.
}
public void draw(){
moveShip();
moveRock();
drawObstacle(rock1, 3);
drawObstacle(rock2, 3);
drawObstacle(rock3, 3);
drawObstacle(rock4, 3);
drawObstacle(rock5, 3);
translate(x,y);
// Code behind motion omitted for sake of brevity. It just moves the
// ship up and down across the Processing applet
drawRocketShip();
// drawObstacle and drawRocketShip create composite images using the
// ellipse(), rect(), and triangle() functions.
}
}
您可以使用
get()
函数以这种方式完成。您可以在中找到更多信息,但基本上它允许您获得特定像素的颜色。你可以在此基础上执行一些逻辑
但老实说,你不应该这样想。与其根据实际绘制的图形进行碰撞检测,不如根据存储在内存中的一组形状进行碰撞检测。在大多数情况下,一个简单的圆或矩形就可以了
如果您使用translate()
函数来绘制所有内容,这会变得更加复杂,但是您可以使用screenX()
和screenY()
函数将坐标转换为屏幕坐标。同样,可以在中找到更多信息
无耻的自我推销:我已经写了一篇关于处理过程中碰撞检测的教程,但是互联网上有大量的资源
如果您仍然有问题,请将您的问题缩小到a,我们将从那里开始。祝你好运。你可以使用
get()
函数来实现。您可以在中找到更多信息,但基本上它允许您获得特定像素的颜色。你可以在此基础上执行一些逻辑
但老实说,你不应该这样想。与其根据实际绘制的图形进行碰撞检测,不如根据存储在内存中的一组形状进行碰撞检测。在大多数情况下,一个简单的圆或矩形就可以了
如果您使用translate()
函数来绘制所有内容,这会变得更加复杂,但是您可以使用screenX()
和screenY()
函数将坐标转换为屏幕坐标。同样,可以在中找到更多信息
无耻的自我推销:我已经写了一篇关于处理过程中碰撞检测的教程,但是互联网上有大量的资源
如果您仍然有问题,请将您的问题缩小到a,我们将从那里开始。祝你好运
我需要检查一个方法是否创建了与另一个方法重叠的图像
你在显示器上检测碰撞的方法有些古怪
每个程序由3层组成
多边形的计算可能更复杂 我需要检查一个方法是否创建了与另一个方法重叠的图像 你在显示器上检测碰撞的方法有些古怪 每个程序由3层组成
多边形的计算可能更复杂
/// represents a point in an abstract coordinate system where
/// the coordinates must be less than Integer.MAX_VAL/2
/// and bigger than Integer.MIN_VAL/2
/// to avoid integer overflows on calculations
class GameCoordinate{
public final int x;
public final int y;
GameCoordinate(int x, int y){
this.x = x;
this.y = y;
}
}
/// something that can cause a colision
interface GameObject{
GameCoordinate getCenter();
GameCoordinate getNearestSurfacePointTo(GameObject other);
boolean collidesWith(GameObject other);
}
class Cycle implements GameObject{
private final GameCoordinate center;
private final int radius;
Cycle(GameCoordinate center, radius){
this.center = center;
this.radius = radius;
}
@Override
GameCoordinate getCenter(){
return center;
}
@Override
GameCoordinate getNearestSurfacePointTo(GameObject other){
deltaX= (int)(center.x-other.getCenter().x);
deltaY= (int)(center.y-other.getCenter().y);
return new GameCoordinate(
center.x +(radius*(deltaY/deltaX))),
center.y +(radius*(deltaX/deltaY))));
}
@Override
boolean collidesWith(GameObject other){
GameCoordinate othersNearestPointToMe = other.getNearestSurfacePointTo(center);
deltaX= (int)(center.x-othersNearestPointToMe.getCenter().x);
deltaY= (int)(center.y-othersNearestPointToMe.getCenter().y);
return radius >= (int)Math.abs(Math.sqr( deltaX*deltaX+deltaY*deltaY));
}
}