每 3 秒在屏幕上创建和显示游戏对象

Posted

技术标签:

【中文标题】每 3 秒在屏幕上创建和显示游戏对象【英文标题】:Creating and displaying game objects every 3 seconds on the screen 【发布时间】:2011-12-22 13:23:45 【问题描述】:

我无法每 3 秒在屏幕上创建和显示多个游戏对象。只有一个对象时没有问题,但如果我想创建多个对象,就会出现问题。详细解释一下,有一个主游戏循环(与互联网上现有的相同),在该游戏循环中,我希望每 3 秒创建一个新对象,添加到 ArrayList 然后更新游戏面板每 3 秒显示屏幕上的所有对象。上面的代码块有效,但它太快了,所以屏幕上充满了图像,我希望它是周期性的。我必须做什么?如果使用后台线程来防止 UI 线程阻塞,我该怎么做?

提前致谢。

这是我的代码块: 主线部分:

    while (running) 
        canvas = null;          
        try 
            canvas = this.surfaceHolder.lockCanvas();
            synchronized (surfaceHolder) 
                beginTime = System.currentTimeMillis();

                this.gamePanel.update();

                this.gamePanel.render(canvas);          

            
         finally 
            if (canvas != null) 
                surfaceHolder.unlockCanvasAndPost(canvas);
            
         // end finally
    

我的 MainGamePanel 类中的更新方法: 公共无效更新()

    int random = 5 + (int) (Math.random() * (200 - 5));
    droid = new Carrier(BitmapFactory.decodeResource(getResources(),
            R.drawable.image), random, 1);
    Carriers.add(Carrier);

    for (int i = 0; i < Carriers.size(); i++) 
        Carrier CarrierTemp = Carriers.get(i);
        CarrierTemp .update();
    

【问题讨论】:

【参考方案1】:

这是基于您当前代码构建的解决方案:

把这个放在你的线程中的某个地方:

int savedtime = 0;
long lastTime;

在你的 update() 方法中:

//Calculate time since last update:
long now = System.currentTimeMillis();
savedtime += now - lastTime;
lastTime = now;
if(savedTime > 3000)//if more than three seconds have passed:
    savedTime = 0;
    int random = 5 + (int) (Math.random() * (200 - 5));
    droid = new Carrier(BitmapFactory.decodeResource(getResources(),R.drawable.image), random, 1);
    Carriers.add(Carrier);

for (int i = 0; i < Carriers.size(); i++) 
    Carrier CarrierTemp = Carriers.get(i);
    CarrierTemp .update();

【讨论】:

非常感谢哥们,有时不同的观点可以挽救一天。它是固定的。

以上是关于每 3 秒在屏幕上创建和显示游戏对象的主要内容,如果未能解决你的问题,请参考以下文章

C#当鼠标移动事件时,时间循环停止

结对-贪吃蛇游戏设计文档

使用 Python kivy 创建游戏开始菜单

在画布上显示和隐藏对象?

pygame应用---射击外星人游戏

如何在 Android 上的 Unity 中禁用用于屏幕截图的游戏对象?