Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java libGDX-尝试实现两个精灵之间的冲突_Java_Android_Libgdx_Sprite_Collision - Fatal编程技术网

Java libGDX-尝试实现两个精灵之间的冲突

Java libGDX-尝试实现两个精灵之间的冲突,java,android,libgdx,sprite,collision,Java,Android,Libgdx,Sprite,Collision,标题基本上是怎么说的 关于当前游戏的一些背景:玩家总是从左向右移动,如果屏幕被点击,他会跳,如果屏幕被拖动,他会向前冲。我添加了一个平铺(平台对象),现在试图让我的玩家在碰到它时停止移动 播放器从屏幕的左下角开始,平台在右上角。发生的情况是,玩家在到达屏幕中间时停止,而不是到达实际的平台。有人能看看我的代码,看看他们是否能找出原因吗?非常感谢 public class Platform extends GameObject { private Rectangle playerRect; priv

标题基本上是怎么说的

关于当前游戏的一些背景:玩家总是从左向右移动,如果屏幕被点击,他会跳,如果屏幕被拖动,他会向前冲。我添加了一个平铺(平台对象),现在试图让我的玩家在碰到它时停止移动

播放器从屏幕的左下角开始,平台在右上角。发生的情况是,玩家在到达屏幕中间时停止,而不是到达实际的平台。有人能看看我的代码,看看他们是否能找出原因吗?非常感谢

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

    }
}
    }
已经在这上面停留了一段时间,提前感谢您的任何输入矩形的
类需要x、y、宽度和高度

但你要给它提供对角点的坐标

替换

// 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());


希望这能有所帮助。

如果矩形在你想的地方,你可以看到,如果玩家因碰撞或其他尝试而停止,我会将其放在更新中,但你可以放在其他任何地方

我希望你能理解

变量类

   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);
}
}
你的方法

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();
//添加以进行测试更新或绘制

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();

谢谢你的回复,仍然有同样的问题。谢谢你的回复。我尝试了你的代码,但我没有看到任何矩形,现在精灵没有停止(没有碰撞检测)。我仍然没有在Android Lolnevermin中成功地绘制出一个矩形,我把它放在draw()中,它就工作了。谢谢!编辑:矩形在正确的位置,但是没有检测到碰撞。lolok我必须在update()方法中初始化矩形,现在一切正常。谢谢again@DeuceDeuce我很高兴你工作了,但你不能在构造器?中使其成为inicializen,并在更新中进行更新,因为否则会在每次更新时创建它们,我认为这会降低效率,最好相信只更新位置,@deuceduce,而不是在每次调用时创建它们,只更新我的意见,对不起,我的英语不好