Я создал класс Bullet, используя векторы для рисования пуль и сохранения их в массиве. Я пробовал, но не мог понять, как обнаружить столкновение с этими пулями.Массив обнаружения столкновений пулей в slick2d
Вот класс пули:
public void render(GameContainer gc, Graphics g) throws SlickException {
if(active) {
g.setColor(Color.red);
g.fillOval(pos.getX()-10, pos.getY()-10, 20, 20);
g.drawString("BulletX: "+pos.getX(), 400, 100);
g.drawString("BulletY: "+pos.getY(), 400, 120);
}
}
public void update(int t) {
if(active) {
Vector2f realSpeed = speed.copy();
pos.add(speed.copy().scale(t/1000.0f));
pos.add(realSpeed);
lived += t;
if(lived > MAX_LIFETIME) {
active = false;
}
}
}
Вот класс Play:
Я заполнил массив в методе инициализации, используя этот код:
bullets = new Bullet[8];
for(int i=0; i<bullets.length; i++) {
bullets[i] = new Bullet();
}
В классе обновления я использовал этот код для отображения пуль, когда игрок решает стрелять:
if(t > FIRE_RATE && gc.getInput().isKeyDown(Input.KEY_SPACE)) {
if(player == movingUp) {
bullets[current] = new Bullet(new Vector2f(420,295), new Vector2f(0,-1));
current++;
if(current >= bullets.length) current = 0;
t = 0;
}
Вот игрок и противник движения
//up
if(input.isKeyDown(Input.KEY_UP)) {
player = movingUp;
playerPositionY += delta * .3f; //moves world
enemyPositionY += delta * .3f;
if(playerPositionY > 273) { //collision detection
playerPositionY -= delta * .3f;
enemyPositionY -= delta * .3f;
}
}
if(enemyPositionY > shiftY) {
enemyPositionY -= delta *.1f;
}
if((enemyPositionX >= 355 && enemyPositionX <= 440) && (enemyPositionY >= 230 && enemyPositionY <= 310)) {
enemyPositionX = playerPositionX;
enemyPositionY = playerPositionY;
lives--;
}
Можете ли вы помочь мне понять, как я могу обнаружить столкновения с этими пулями, пожалуйста?
+1. Так поступают большинство 2D-движков/библиотек конфликтов. – Zutty
В зависимости от скорости пули вы можете столкнуться с некоторыми проблемами, однако – TastyLemons