2015-03-02 3 views
0

Я работаю над простой 2D-платформерной игрой, где игрок ходит и собирает предметы (например, оружие, меч и т. Д.). Итак, вот мой игрок (или персонаж)Элементы персонажей игры LibGDX

public class CoolGuy extends GameObject { 
    private Rectangle bottom, left, right, top, full; 
    private Sprite sprite; 

    public CoolGuy(){ 
     full = new Rectangle(0, 0, 50, 98); 
     bottom = new Rectangle(0, 0, 50, 15); 
     top = new Rectangle(0, 83, 50, 15); 
     left = new Rectangle(0, 15, 25, 68); 
     right = new Rectangle(25, 15, 25, 68); 

     sprite = new Sprite(TextureManager.coolGuy); 
     sprite.setSize(50, 98); 
    } 

    /* lots of code here */ 
} 

также у меня есть класс предмета. Когда игрок сталкивается с этим классом спрайт (и прямоугольник) игрока должен получить новую власть (как стрельба и так далее ...)

 public class Gun extends ItemObject{ 

      private Sprite sprite; 
      private Rectangle full; 

      public Gun(int x, int y){ 
       sprite = new Sprite(TextureManager.gunItem); 
       sprite.setSize(25, 15); 

       full = new Rectangle(0, 0, 25, 15); 

       setPosition(x, y); 
      } 

      @Override 
      public int hits(Rectangle r) { 
       if(full.overlaps(r)){ 
        return 1; 
       } 
       return -1; 
      } 
/* lots of code here */ 
    } 

А вот мой новый класс мощности. В этом случае стреляет новая сила.

public class PlayerBullet extends ItemObject{ 

    private Sprite sprite; 
    private Rectangle full; 

    public PlayerBullet(){ 
     sprite = new Sprite(TextureManager.playerBullet); 
     sprite.setSize(15, 15); 
     full = new Rectangle(0,0,15,15); 
    } 

    @Override 
    public int hits(Rectangle r) { 
     if(full.overlaps(r)){ 
      return 9; 
     } 
     return -1; 
    } 
    /* A lot of code here */ 
} 

Итак, как мне нужно добавить эту мощность в плеер? Я знаю, что у меня могло бы быть много логических и даже PlayerBullet объектов в моем CoolGuy (класс игрока) и установить их все на null, а позже, если игрок столкнется с моим классом Gun, я мог бы создать новый объект и так далее ... Но я верю есть другой путь. enter image description here

+0

Есть бесконечные способы сделайте это, и вы уже упоминали один из самых простых способов. Не уверен, что вы на самом деле спрашиваете. – Tenfour04

+0

Хорошо, но если у меня есть 20 предметов? Тогда у меня должны быть все объекты объектов в моем классе. Я не думаю, что это хорошая идея ... – David

+0

Поместите их в список. Или используйте логический массив, где каждый индекс соответствует типу элемента. – Tenfour04

ответ

1

Сделать ссылку на «ItemObject» в вашем классе игрока и еще не инициализировать его. Эта ссылка будет отслеживать ваш текущий powerup. Когда игрок перейдет через спрайт, установите ссылку на этот объект. Теперь, когда вы хотите выполнять определенные действия с конкретным элементом, поместите эти действия/методы в класс powerup, который в вашем случае является PlayerBullet. Теперь вам не нужно проверять, какой предмет у игрока есть, и вы можете эффективно выполнять действия, связанные с конкретным действием. CoolGuy класс:

public class CoolGuy extends GameObject { 
private Rectangle bottom, left, right, top, full; 
private Sprite sprite;' 

ItemObject currentItem; 

public CoolGuy(){ 
    full = new Rectangle(0, 0, 50, 98); 
    bottom = new Rectangle(0, 0, 50, 15); 
    top = new Rectangle(0, 83, 50, 15); 
    left = new Rectangle(0, 15, 25, 68); 
    right = new Rectangle(25, 15, 25, 68); 

    sprite = new Sprite(TextureManager.coolGuy); 
    sprite.setSize(50, 98); 
    } 

public void equipItem(ItemObject item){ 
currentItem = item; 
} 

/* lots of code here */ 
} 

Вы можете вызвать этот метод equipItem() и передать ему объект, попадающий с игроком. Для использования включения питания, вы можете добавить еще один метод PlayerBullet или пистолет:

public void ItemUsed(){ 
//item use effect 
} 

А затем сделать еще один метод в проигрывателе и вызвать ItemUsed от этого метода:

public void useItem(){ 
//check if player has any item 
if(currentItem != null){ 
//if it has then use item 
currentItem.useItem(); 
} 
} 

Конечно, вам придется добавить ArrayList или Array из вас хотят одновременно оснастить более одного элемента.

Это был просто образец или идея, как вы можете реализовать то, что хотите. Вам нужно будет сделать несколько дополнительных вещей, чтобы заставить его работать.

1

@ user3334375 Вам просто нужно тщательно нарисовать эту коробку. Это означает, что если вы даете некоторые очки с этим блоком питания, проверьте, что если подсчет очков, то снимите флажок. Например

if (!powerboxscored){Draw power box} // 

Этот метод принимает логическое значение powerboxscored. Если булево ложно он нарисует этот флажок недо булево становится истинным, и это будет только стать истинным, когда и добавить мощности в ур код ...

Я надеюсь, что это помогает ..

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