2014-11-23 3 views
1

, что название говорит, что в основномlibGDX - Попытка осуществить столкновения между 2 спрайтами

бит фона о текущей игре: Игрок всегда двигается слева направо, если экран касания он прыгает, если он потащил он подскакивает вперед. Я добавил плитку (объект платформы), и теперь я пытаюсь заставить моего игрока остановиться, если он ударит его.

Игрок находится в левом нижнем углу экрана, а платформа находится сверху справа. Случается, что Игрок останавливается, когда он достигает середины экрана, а не фактической Платформы. Может ли кто-нибудь взглянуть на мой код и посмотреть, смогут ли они понять, почему? Было бы высоко оценено.

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

- это то, что вы можете видеть, если прямоугольники, где вы думаете, и если игрок останавливается, столкнувшись или иным образом что-то попробовав, я добавлю его в обновление, но вы можете поместить где-нибудь еще рисовать ect.

Надеюсь, вы понимаете.

Переменный класс.

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

Спасибо за ответ. Я пробовал свой код, но я не вижу никаких прямоугольников, и теперь спрайт не останавливается (обнаружение столкновения отсутствует). Я все еще не имел никакого успеха в рисовании прямоугольника в Android lol – DeuceDeuce

+0

nevermind, я положил его в draw(), и он работает. Большое спасибо! edit: прямоугольники находятся в правильном месте, но столкновение не обнаружено lol – DeuceDeuce

+0

ok Мне пришлось инициализировать прямоугольники в методе update(), все работает сейчас. Еще раз спасибо – DeuceDeuce

1

constructor из Rectangle класса требует х, у, ширина, высота

Но поставляют координаты противоположные углы к нему.

Заменить

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

Надеется, что это помогает.

+0

Спасибо за ответ, по-прежнему имеют ту же проблему. – DeuceDeuce

Смежные вопросы