如何使用Android 调用update?

移动开发 Android
怎么能更好的调用update就可以说是整个游戏的引擎,正是由于它的工作的重要因素,就好比是贪吃蛇正在吃苹果一样。

下文详细说明介绍Android 调用update的具体学习方法以及详细工作学习,当休眠的时间已经到了,首先去调用update,即为下一次绘制做准备工作,再让自己休眠起来,***通知系统重绘制自己。

然后等到苏醒后在Handler中就会让系统区绘制上次修改过的二维方块地图,然后再次Android 调用update,如此循环反复,生生不息),才使得游戏不断被推进,因此,比做“引擎“不为过。

既然update是游戏的动力,要让游戏停止下来只要不再Android 调用update就可以了(因为此时其实是画面静止了),因此游戏进入暂停(这个状态还可以转为“运行“。其实就是继续可以修改,再绘制)

public void update()  
    {  
        if (mMode == RUNNING)  
        {  
            long now = System.currentTimeMillis();  
            if (now - mLastMove > mMoveDelay)   
            {  
                clearTiles();  
                updateWalls();  
                updateSnake();  
                updateApples();  
                mLastMove = now;  
            }  
            mRedrawHandler.sleep(mMoveDelay);  
        } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

若进入失败(其实此时二维方块地图还停留在***一个画面处,这也是为什么在开始时要首先清理掉整个地图)【这一点,可以在游戏失败后,再次开始新游戏,此时通过设置的断点即可观察到上次游戏运行时的底层数据】。

可是个人认为Snake下面这段代码读起来有点怪,有点像一个“先有鸡,还是先有蛋?“的问题,导致我的思维逻辑上出现一个“怪圈“。

switch (item.getItemId()) {  
         case MENU_ITEM_DELETE: {  
             // Delete the note that the context menu is for  
             Uri noteUri = ContentUris.withAppendedId(getIntent().getData(), info.id);  
             getContentResolver().delete(noteUri, null, null);  
             return true;  
         }  
     }  
     return false;  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

按照这段代码的意思来看,当休眠的时间已经到了,首先去Android 调用update,即为下一次绘制做准备工作,再让自己休眠起来,***通知系统重绘制自己。哎,这让我难以理解,还是回到时刻0的例子来说,在时刻0时让蛇身向北前进了一步(指的是底层的二维方格地图的修改,不是界面)。

然后让自己休眠0.6毫秒,当时间到了,首先去Android 调用update方法,那么就又会让蛇身做出修改,也就是把上一次还没绘制的覆盖掉了(那么上一次的修改岂不是白费,还没画上去呢)。

更何况在update中又会让自己去休眠(还没调用invalidate,怎么又去休眠了?),又怎么还能去通知系统调用我的onDraw方法呢?也就是说invalidate根本没有执行???按我的理解,应该把顺序颠倒一下,先通知系统去调用onDraw方法重绘,使得上一次对底层二维方格地图的修改显示出来。

然后再去为下一次修改做准备工作,***让自己进入休眠,等待苏醒过来,如此循环反复。实验证明,颠倒过来也是正确的,不过关于这一个迷惑我的地方,希望有朋友能指点我一下!记得在javascript里使用setInterval时,也是先写处理逻辑,然后在末尾处写上一句setInterval(这也是我习惯的思维方式了),难道google上面这种写法有何深意?

此外,感觉每次绘制时都重新绘制墙壁,有点浪费时间,因为墙壁根本没有任何变化的。还有就是mLastMove这个变量设置的初衷是保证当前时间点距上一次变化已经过去了mMoveDelay毫秒,可是既然已经用了sleep机制,再使用这个时间差看上去并无必要。

【编辑推荐】

  1. Android应用程序组建原理深入剖析 
  2. Android SMS短信服务相关概念简述 
  3. PythonAndroid数据库相关代码解读 
  4. PythonAndroid安装卸载程序具体操作方法解析 
  5. Android应用程序的四个关键点 
责任编辑:chenqingxiang 来源: 人民邮电出版社
相关推荐

2017-01-13 14:32:50

Azurewebhoo自动化AzureWebhook

2009-11-09 10:50:30

WCF异步调用

2009-07-21 09:43:36

调用UpdatePanASP.NET

2021-04-26 05:33:54

Python异步编程

2010-10-08 16:01:17

mysql UPDAT

2020-06-30 08:23:00

JavaScript开发技术

2014-02-19 11:00:40

Software UpOS X OS X M

2010-09-27 10:04:30

Sql Update语

2010-09-17 10:39:36

SQL中

2010-03-05 16:47:11

Android操作系统

2009-07-14 16:16:04

JDBC update

2022-12-29 15:55:55

Windows 11

2010-09-09 15:04:29

SQL更新语句

2011-06-30 15:26:28

Update数据库

2014-04-08 15:40:57

Windows 8.1

2019-10-18 13:40:10

Windows 10 Windows Up驱动程序

2010-12-12 21:01:00

Android控件

2020-09-30 08:07:46

如何优化尾调用

2011-05-30 17:31:51

Android 模拟SD卡

2009-09-21 13:05:18

Hibernate u
点赞
收藏

51CTO技术栈公众号