标题基本上是什么
关于当前游戏的一些背景知识:玩家总是从左向右移动,如果屏幕被点击,他会跳跃,如果它被拖动,他会向前冲。我添加了一个磁贴(平台对象),现在我试图让我的玩家停止移动,如果他击中它。
播放器从屏幕左下角开始,平台位于右上角。发生的事情是玩家在到达屏幕中间时停止,而不是实际的平台。任何人都可以查看我的代码,看看他们是否可以找出原因?非常感谢。
public class Platform extends GameObject {
private Rectangle playerRect;
private Rectangle platformRect;
private Player player;
private boolean isOverlapping;
public Platform(Sprite spr) {
super(spr);
player = Player.getInstance(null); // Initialises the Player class (a Singleton)
// Set position of sprite
setxPos(getWidth() - 400);
setyPos(getHeight() / 2 - 100);
spr.setX(getxPos());
spr.setY(getyPos());
}
public void update() {
// Rectangle of Player
playerRect = new Rectangle(player.getxPos(), player.getyPos(), player
.getSprite().getWidth() + player.getxPos(), player.getSprite()
.getHeight() + player.getyPos());
// Rectangle of Platform
platformRect = new Rectangle(getxPos(), getyPos(), getSprite().getWidth()
+ getxPos(), getSprite().getHeight() + getxPos());
// Make Player stop moving if the two rectangles collide
isOverlapping = playerRect.overlaps(platformRect);
if (isOverlapping) {
player.setxSpeed(0);
}
}
}
已经坚持了一段时间,提前感谢任何输入
答案 0 :(得分:1)
Rectangle
类的constructor需要x,y,width,height
但是你要为它提供相反角的坐标。
替换
// Rectangle of Player
playerRect = new Rectangle(player.getxPos(), player.getyPos(), player
.getSprite().getWidth() + player.getxPos(), player.getSprite()
.getHeight() + player.getyPos());
// Rectangle of Platform
platformRect = new Rectangle(getxPos(), getyPos(), getSprite().getWidth()
+ getxPos(), getSprite().getHeight() + getxPos());
与
// Rectangle of Player
playerRect = new Rectangle(player.getxPos(), player.getyPos(),
player.getSprite().getWidth(),
player.getSprite().getHeight());
// Rectangle of Platform
platformRect = new Rectangle(getxPos(), getyPos(),
getSprite().getWidth(), getSprite().getHeight());
希望这有帮助。
答案 1 :(得分:0)
是你可以看到矩形是你想到的地方,如果玩家因碰撞而停止或以其他方式尝试某些东西,我把它放在更新中,但你可以放在其他任何地方画等。
我希望你明白。
变量类。
private ShapeRenderer sRDebugRectangelPlayer = new ShapeRenderer();
private ShapeRenderer sRDebugRectangelPlatform = new ShapeRenderer();
private Rectangle playerRect = new Rectangle();
private Rectangle platformRect = new Rectangle();
你的方法
public Platform(Sprite spr) {
super(spr);
player = Player.getInstance(null); // Initialises the Player class (a Singleton)
// Set position of sprite
setxPos(getWidth() - 400);
setyPos(getHeight() / 2 - 100);
spr.setX(getxPos());
spr.setY(getyPos());
//add
// Rectangle of Player
playerRect = new Rectangle(player.getxPos(), player.getyPos(),
player.getSprite().getWidth(),
player.getSprite().getHeight());
// Rectangle of Platform
platformRect = new Rectangle(getxPos(), getyPos(),
getSprite().getWidth(),
getSprite().getHeight());
}
你的方法
public void update() {
playerRect.setPosition(player.getxPos(), player.getyPos());
platformRect.setPosition(getxPos(), getyPos());
// Make Player stop moving if the two rectangles collide
isOverlapping = playerRect.overlaps(platformRect);
if (isOverlapping) {
player.setxSpeed(0);
}
}
//在更新中添加测试或绘制
sRDebugRectangelPlayer.begin(ShapeType.Filled);
sRDebugRectangelPlayer.identity();
sRDebugRectangelPlayer.rect(player.getxPos(), player.getyPos(),
player.getSprite().getWidth(),
player.getSprite().getHeight());
sRDebugRectangelPlayer.end();
//添加测试更新或绘制
sRDebugRectangelPlatform.begin(ShapeType.Filled);
sRDebugRectangelPlatform.identity();
sRDebugRectangelPlatform.rect(getxPos(), getyPos(),
getSprite().getWidth(),
getSprite().getHeight());
sRDebugRectangelPlatform.end();