我正在制作简单的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我可以创建新对象等等......但我相信还有其他方法。
答案 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,它将绘制此框,直到布尔值变为真,并且只有当你在你的代码中添加幂时才会变为真......
我希望它有所帮助..