游戏角色物品LibGDX

时间:2015-03-02 14:55:41

标签: libgdx items

我正在制作简单的2D平台游戏,玩家可以走路和收集物品(如枪,剑等)。所以这是我的玩家(或角色)

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 */
}

我也有我的Item类。当玩家与这个类精灵(和矩形)发生碰撞时,玩家应获得新的力量(如射击等......)

        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 然后如果玩家与我的{{1我可以创建新对象等等......但我相信还有其他方法。 enter image description here

2 个答案:

答案 0 :(得分:1)

在播放器类中引用“ItemObject”,并且不要初始化它。此参考将跟踪您当前的通电情况。当玩家遍历精灵时,将参考设置为该对象。现在,当您想要执行特定于项目的操作时,将这些操作/方法放在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()方法并将它传递给与玩家发生碰撞的对象。要使用powerup,您可以向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或Array,你想一次装备多个项目。

这只是您如何实现所需内容的示例或想法。你必须做一些额外的事情才能让它发挥作用。

答案 1 :(得分:1)

@ user3334375您只需要仔细绘制此框。意味着如果您使用此枪支电源盒给出一些分数,请检查如果计算了点数,则删除框。 例如

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

此方法采用powerboxscored布尔值。 如果布尔值为false,它将绘制此框,直到布尔值变为真,并且只有当你在你的代码中添加幂时才会变为真......

我希望它有所帮助..