我目前正试图制作推箱子游戏(玩家将板条箱推入钻石的游戏)。 我已经计算出将精灵显示在屏幕上并可以移动玩家精灵但可以推动部分工作。
这是我的运动方法:
public void move(Direction d){
char objectType;
Objects o;
Point p = convertPhysicalToGrid(WKSprite.getLocation());
Point q = getLocation(p, d);
objectType = getObjectTypeAtPoint(q);
o = getObjectAtPoint(q);
Point n = getLocation(q, d);
System.out.println(objectType);
System.out.println(o);
if (q != null) {
if(objectType == 'C' ){
System.out.println("Crate hit");
grid[q.y][q.x] = grid[n.y][n.x];
grid[p.y][p.x] = grid[q.y][q.x];
grid[p.y][p.x] = null;
o.setLocation(convertGridToPhysical(n));
WKSprite.setLocation(convertGridToPhysical(q));
}
else if(grid[q.y][q.x] == null){
grid[p.y][p.x] = grid[q.y][q.x];
grid[p.y][p.x] = null;
WKSprite.setLocation(convertGridToPhysical(q));
}
}
}
机芯工作正常,但在检查是否有箱子时,它不起作用。
我在移动之前调用这两种方法,这样我就可以在玩家实际移动时检查碰撞
public char getObjectTypeAtPoint(Point p){
int collision = 0;
char objectType = 0;
for (int i = 0; i < objectList.size(); i++) {
if (objectList.get(i).getPosition() == p){
collision = i;
objectType = objectList.get(collision).getObjectType();
}
}
return objectType;
}
public Objects getObjectAtPoint(Point p){
int collision = 0;
for (int i = 0; i < objectList.size(); i++) {
if (objectList.get(i).getPosition() == p){
collision = i;
}
}
return objectList.get(collision);
}
问题在于在这些方法中进行if测试时。即使数组列表中对象的点与给定点匹配,if中的代码也不会发生。 char方法只返回0,而Objects方法总是返回一个点为0,0的对象。
我也尝试过objectList.get(i).contains()而不是ojectList.get(i).getPosition(),但是它也没有用。
任何人都可以解释我出错的地方,或者是否有不同的方法可以做到这一点。
答案 0 :(得分:0)
尝试将objectList转换为Point。对象可以包含各种数据类型,因此如果您希望它= =另一种特定数据类型,则需要具体:
if((Point)objectList.get(i).getPosition()== p){..............}
在两个地方。