当前位置: 首页 > 知识库问答 >
问题:

如何定期繁殖敌人

盖晋
2023-03-14

我试图创建一个游戏,敌人将随机产卵,并向屏幕上的一个点移动。我的问题是程序等待它们产卵,然后它们开始移动它们。我希望它们在产卵时开始移动,并在每个产卵之间有一个短暂的Rest。

下面是让它们移动的两个主要方法:

public void newLevel() {
    runOnUiThread(new Runnable(){
        public void run() {
            int i = 0;
            while( i < 10){
                addSpeks();
                i++;
                try {
                    Thread.sleep(2000);
                }
                catch(InterruptedException ie){
                    ie.printStackTrace();
                }
            }
        }
    });
}

public void addSpeks() {
    Spek newSpek = new Spek(this);

    setRandomRegion();

    newSpek.setX(spawnX);
    newSpek.setY(spawnY);

    relativeLayout.addView(newSpek);
    spekList.add(newSpek);
    newSpek.setOnClickListener(spekListener);
    newSpek.animate().x(finalX).y(finalY).setDuration(8000);
}

Spek是一个简单的类,它扩展了ImageView,setRandomRegion()在屏幕边界上选择一个随机的x,y坐标。为了简单起见,我在while循环中有一个计数器,但我希望最终将其移动到一个条件无限循环中,只有在你输掉游戏时,它才会停止。

感谢您的帮助,如果问题需要进一步澄清,请告诉我。

共有2个答案

董庆
2023-03-14

newLevel()方法完全在UI线程和线程上运行。睡眠(2000)让wait成为你的UI线程,每次迭代2秒。要添加这种延迟,可以使用处理程序:

将处理程序声明为成员类

final Handler mHandler = new Handler();
int i = 0;

并相应地更改新级别:

public void newLevel() {
    mHandler.postDelayed(new Runnable(){
        public void run() {
            if (i > 10) {
              mHandler.removeCallbacks(this);
              return;
            }
             addSpeks();
             i++;
             mHandler.postDelayed(this, 2000);                 
        }
    }), 2000);
}

另一种选择是将Runnable实例声明为最终成员,以避免每次调用newLevel时都将其安装。检查打字错误

呼延震博
2023-03-14

完成后,你必须重新运行你的线程,在Android中可以这样做:

首先,创建可运行的

private Runnable SpawnEnemies = new Runnable(){
    public void run(){
        //Your code here...

        spawnHandler.postDelayed(2000, this);
    }
};

然后,创建一个处理程序,它将是运行线程(或者,好吧,运行)的类,并像这样启动您的Runnable

Handler spawnHandler = new Handler();
spawnHandler.post(new SpawnEnemies());

这将每2秒运行一次,您还可以添加一个布尔值或类似的东西来手动停止循环。

 类似资料:
  • 我正在做一些测试来理解@Transactional在Spring 3中的行为。虽然,它没有像我预期的那样工作。如果有一个方法Propagation.REQUIRED调用另一个方法Propagation.REQUIRES_NEW,第二个方法是否能够从数据库中检索第一个方法插入的数据? 编辑:我在@Transaction中看到未提交的更改,这是我的(看起来很讨厌的)代码。

  • 我自己找到了一种从熊猫数据帧中删除nan行的方法。给定一个包含nan值的列为的数据帧,是否有更优雅的方法来删除列中包含nan值的每一行?

  • 我对改装《我的世界》是新手,我想知道如何改变暴民产卵率。例如,假设我们想产生大量的Enderman。 到目前为止,我已经在: 这意味着在大多数生物群落中,尽管很少产卵(10是体重,爬行动物和蜘蛛有100)。 我知道这个然后被到,等。我的结论是,我需要改变生物群落以改变产卵率。 我可以使用或。我在这里看到两种方法: 完全替换生物群落图。不幸的是,它的方法是,因此我无法添加新的生物群落来取代现有的生物

  • 问题内容: 我正在使用Pygame制作Python游戏,目前正在研究Hitbox。每当玩家与敌人碰撞时,程序应暂停(设置)。 当我注释掉所有敌人的移动(第56-64行)时,它只会“起作用”,但这显然不是最佳选择。我已经读过有关Pygame拥有自己的Hitbox碰撞系统的信息,但无法弄清楚。 游戏代码: 您知道解决办法吗?有没有比我现在拥有的方法更好的选择了? 问题答案: 我建议使用对象,或者使用或

  • 如何在Liferay的7.2自定义主题中插入和使用字体awesome 4? 我在Liferay的门户开发中看到,通过选择:控制面板→配置→系统设置→第三方,我可以找到一个字体真棒选项,但该选项不在我的面板中。 在本教程中还解释了如何使用字体真棒3,但没有关于版本4。

  • 当玩家或敌人被击中时,我希望他们的精灵变成红色。从本质上讲,我想要在精灵上显示透明的红色效果。皮游戏是否提供了一种方法来做到这一点?(我使用多个图像,因为角色是动画的,所以创建一个红色的精灵,只是闪烁而不是正常的子画面是行不通的)