2013-03-08 50 views
1

我必须在我的游戏中显示palyers的生命。每一个玩家击中了错误的敌人静物时间decrease.the默认静物是5标签覆盖标签,同时在cocos2d中显示健康标签android

我的代码如下

首先我在gamelayer声明此

static int lifes=5; 
CCLabel _lifes; 

随后的方法如下在代码

public void showLable(CCLabel _lifes){ 


    if(_lifes != null){ 
      this.removeChild(_lifes,true); 
     } 

    _lifes = CCLabel.makeLabel("" + lifes, "Verdana", 20); 
     _lifes.setColor(ccColor3B.ccbrown); 
     _lifes.setPosition(winSize.width/2,(winSize.height/2)); 
     addChild(_lifes,3) 
    } 

那么的底部我写了这个条件,玩家击中错误的敌人

lifes--; 
showLable(_lifes); 

1)一切正常,标签显示和标签减少,但标签不显示,直到玩家击中错误的敌人,因为你看到我默认值为5,标签显示后玩家击中错误的敌人,即从4.

2)另一个主要问题是显示的标签不显示以前的值而显示。例如。生命是默认的5。当游戏开始时显示5。当生命降低时,生命值应该是4,所以在我的游戏中,4被放置在5本身。 然后生命被放在与3或2或1相同的数字上。所有的数字都显示在对方身上。现在,我想你明白我提前

+0

我猜你是调用'showLable(_lifes);'在你的游戏中它的初始化开始后,所以标签显示值为5.你呢?对于2)我真的不明白:/ – Guian 2013-03-08 18:21:09

+0

不,5没有显示出来,它直接从4开始。总共有5种生命,当一个生命消失时,标签显示为4(这意味着剩下4个生命)。我想要的是,5从游戏开始本身显示为默认值。谢谢 – 2013-03-08 18:41:31

+0

现在我明白了,我只需要写showLable(_lifes);在比赛开始时。但我仍然遭受第二个问题..请帮我 – 2013-03-08 18:48:28

回答

0

1)检查您是在它的初始化后,游戏开始呼吁showLable(_lifes);

感谢,所以标签显示了价值5

2 )我不太确定,但是CCLabel应扩展一个CCSprite,因此有一个setVisible方法。 您可以尝试类似:

我只找到了C++ API参考版本: http://www.cocos2d-x.org/reference/native-cpp/d4/de7/classcocos2d_1_1_c_c_sprite.html

+0

为2)一,这没有工作......我认为应该有一些方法来清除生命的旧价值和更新到新的价值.... ... – 2013-03-08 20:11:50

+0

以及你不应该需要清除旧的值,因为你从头开始重新创建一个新标签......也许你可以避免重新创建和更改值(是不是有'setString'方法? – Guian 2013-03-08 20:52:37

+0

if (life!= null){ this.removeChild(life,true); } – 2013-03-09 07:49:28