游戏角色项目LibGDX

游戏角色项目LibGDX,libgdx,items,Libgdx,Items,我正在做一个简单的2D platformer游戏,玩家在游戏中行走并收集物品(如枪、剑等)。这是我的玩家(或角色) 我还有我的项目类。当玩家与这个类精灵(和矩形)碰撞时,玩家应该获得新的力量(比如射击等等…) 这是我的新动力课。在这种情况下,新的力量正在形成 public class PlayerBullet extends ItemObject{ private Sprite sprite; private Rectangle full; public Player

我正在做一个简单的2D platformer游戏,玩家在游戏中行走并收集物品(如枪、剑等)。这是我的玩家(或角色)

我还有我的项目类。当玩家与这个类精灵(和矩形)碰撞时,玩家应该获得新的力量(比如射击等等…)

这是我的新动力课。在这种情况下,新的力量正在形成

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 */
}
那么我需要如何为我的玩家添加这种力量呢?我知道我可以在我的
Coolgay
(玩家类)中有很多布尔值,甚至
PlayerBullet
对象,并将它们全部设置为null,然后如果玩家与我的
类发生碰撞,我可以创建新对象,等等。。。但我相信还有其他办法。

在你的玩家类中引用一个“ItemObject”,不要初始化它。此参考将跟踪您当前的通电情况。当玩家走过精灵时,将参照设置为该对象。现在,当您想要执行特定于项目的操作时,请将这些操作/方法放在powerup类中,在您的示例中是PlayerBullet。现在你不需要检查你的玩家有哪些物品,你可以有效地执行特定物品的动作。 酷哥班:

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()方法并将与player碰撞的对象传递给它。要使用通电,您可以向PlayerBullet或Gun添加另一种方法:

public void ItemUsed(){
 //item use effect
}
然后在Player中创建另一个方法,并从该方法调用ItemUsed:

public void useItem(){
//check if player has any item 
if(currentItem != null){
//if it has then use item
currentItem.useItem();
}
}
当然,如果你想一次装备多个物品,你必须添加一个ArrayList或ArrayList


这只是一个示例或想法,说明如何实现您想要的。你需要做一些额外的事情来让它工作。

@user3334375你只需要仔细地画这个方框。也就是说,如果你用这个枪电源盒给了一些分数,检查一下,如果分数被计算了,然后移除这个盒子。 比如说

if (!powerboxscored){Draw power box} // 
此方法采用powerboxscored布尔值。 如果布尔值为false,它将绘制此框,直到布尔值变为true,并且只有在您的代码中添加电源时才会变为true


我希望这会有帮助

有无数种方法可以做到这一点,您已经提到了最直接的方法之一。不知道你到底在问什么。好吧,但如果我有20件东西?然后我必须在我的player类中拥有所有items对象。我不认为这是个好主意…把他们列在一个清单上。或者使用一个布尔数组,其中每个索引对应一个项类型。
public void useItem(){
//check if player has any item 
if(currentItem != null){
//if it has then use item
currentItem.useItem();
}
}
if (!powerboxscored){Draw power box} //