-1

我正在开发一款塔防游戏,并且在随着等级的增加而修复更强大的小怪的健康时遇到了一个巨大的问题。我目前将健康设置为 mobSize(我的意思是,健康栏与暴徒的大小成比例)。这显然不适用于更高的级别,因为小怪保持相同的大小并且变得更强大,但我的 draw() 方法可以做到这一点:

public void draw(Graphics g) {
    if(inGame) {
        if(Screen.level == 1){
        g.drawImage(Screen.tileset_mob[1], x, y, width, height, null);
        //Health Bar
        g.setColor(new Color(180, 180, 50));
        g.fillRect(x, y -(healthSpace + healthHeight) , width, healthHeight);      

        g.setColor(new Color(255, 0, 0));
        g.fillRect(x, y -(healthSpace + healthHeight) , mobshealth , healthHeight);

        g.setColor(new Color (0, 0, 0));
        g.drawRect(x, y -(healthSpace + healthHeight), mobshealth - 1, healthHeight -1);
        }

这显然只是从健康栏的宽度中删除,它被设置为暴徒的健康状况。我的问题是,我想制作一个更强大的暴徒,随着等级的增加,它会从健康条中带走更少的东西。有什么建议么?太感谢了!

4

2 回答 2

3

逻辑实体的属性应该与其视觉表示无关,而恰恰相反。

换句话说,你不应该关心与绘图或 GUI 相关的任何事情,而是让你的 Mob 类(逻辑类,而不是它的视觉表示)允许某种类型的强度乘数因子可以应用于它的大小属性和然后在它的getStrength()方法中返回。视觉表示将简单地反映此方法返回的值。

IE,:

// strengthScaleFactor is a double which increases at higher levels
public int getStrength() {
   return (int) (getMobSize() * strengthScaleFactor);
}

暴民力量的视觉表示,“健康栏”,可以计算和使用标准化的力量水平,即上述方法的结果除以返回最大力量的其他方法(getMaxStrength()也许?)。

在这里一直想着MVC

于 2012-08-20T01:40:50.837 回答
0

想想 MVC

//Model fields
//HP, MAXHP

//Controller method
float getHPPercent()
{
return HP/HPMax(float);
}

//View

int HPBoxWidthInPixels
Draw()
{
float percent = controller.getHPPercent();
Rect HPBox.x = Math.RoundToInt(HPBoxWidthInPixels *percent);
}
于 2012-08-20T01:56:31.437 回答