首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android : TimerTask

Android : TimerTask
EN

Stack Overflow用户
提问于 2017-04-01 14:02:15
回答 1查看 886关注 0票数 0

我正在创建一个简单的点击游戏,在屏幕上产生敌人,当用户点击他们,他们得到点,敌人被摧毁。我这样做时,使图像盒可见和不可见时,用户单击他们。它们以计时器运行,并有一个不断的产卵循环。

目前,我想实现一种方式,用户将开始松散的健康。所以我想检查一下敌人的影像盒是否可见,如果是的话,玩家会慢慢失去健康。

我对创建一个可以刷新此作业的UI的计时器任务感到困惑。我希望能够不断检查用户界面,如果一些图像是可见的或不可见的。我已经开始从我自己的研究,但游戏崩溃时,加载,如果这是实现。

刷新UI的计时器:

代码语言:javascript
复制
private Timer mTimer1;
private TimerTask mTt1;
private Handler mTimerHandler = new Handler();

  public void onStart() {
    mTimer1 = new Timer();
    mTt1 = new TimerTask() {
        public void run() {
            mTimerHandler.post(new Runnable() {
                public void run() {
                    //TODO
                    final TextView health = (TextView) findViewById(R.id.Health);
                    health.setText("Health:  " + health2);

                    //Enemy ImageViews
                    final ImageView enemy1 = (ImageView) findViewById(R.id.enemy1);
                    final ImageView enemy2 = (ImageView) findViewById(R.id.enemy2);
                    final ImageView enemy3 = (ImageView) findViewById(R.id.enemy3);
                    final ImageView enemy4 = (ImageView) findViewById(R.id.enemy4);

                    //sets imageViews into array
                    final ImageView[] enemies = new ImageView[4];
                    enemies[0] = enemy1;
                    enemies[1] = enemy2;
                    enemies[2] = enemy3;
                    enemies[3] = enemy4;

                    boolean running = true;
                    while (running) {
                        if (enemy1.getVisibility() == View.VISIBLE) {
                            int damage = 1;
                            health2 = health2 - damage;
                            health.setText("Health:" + health2);
                        } else {
                            // Either gone or invisible
                        }
                        if (enemy2.getVisibility() == View.VISIBLE) {
                            int damage = 1;
                            health2 = health2 - damage;
                            health.setText("Health:" + health2);
                        } else {
                            // Either gone or invisible
                        }
                        if (enemy3.getVisibility() == View.VISIBLE) {
                            int damage = 1;
                            health2 = health2 - damage;
                            health.setText("Health:" + health2);
                        } else {
                            // Either gone or invisible
                        }
                        if (enemy4.getVisibility() == View.VISIBLE) {
                            int damage = 1;
                            health2 = health2 - damage;
                            health.setText("Health:" + health2);
                        } else {
                            // Either gone or invisible
                        }

                    }
                }
            });
        }


    };
    mTimer1.schedule(mTt1, 1, 5000);
}

}

这是我创建的计时器任务。我想弄清楚为什么这会使我的游戏崩溃,以及如何解决这个问题。我以前从来没有用过这样的计时器,所以如果问题很明显,那就是为什么我没有注意到它。

我在onCreate方法中有更多的代码,如果需要的话可以发布。感谢你对这个初学者的所有帮助和建议。

坠机:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-01 14:26:31

根据需要调用super.onStart()的错误消息,您需要在这里添加以下内容:

公开无效onStart() {

super.onStart();

//您的代码

}

我想你知道,但万一超级是你扩展的类,家长。如果重写它是onStart函数,则一般的onStart过程不会完成,如果您不调用超级函数。

编辑:至于你的另一个问题,我(作为java的初学者,所以我并不认为这是最好的方法)会按照这样的思路思考:

首先,创建一个处理程序并为敌人创建运行程序:

代码语言:javascript
复制
Handler handler = new Handler();
Runnable[] eRunnables = new Runnable[enemies.length-1];

for(int i = 0; i < eRunnables.length; i++){
   eRunnables[i] = new Runnable(){
        public void run(){
            if(enemies[i].getVisibility() == View.VISIBLE){
                health2--;
                health.setText("Health:" + health2);
                handler.postDelayed(eRunnables[i], 1000);
            }    
        }
    };
}

然后,在最初使敌人可见的地方(除了将它们设置为可见的),执行以下操作

handler.postDelayed(eRunnableenemyNr,1000);

当然,用您想要的多少毫秒都可以替换1000。

再说一次,我不是说这是最好的方法,这是我想出来的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43157826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档