Android坦克大战游戏设计解析四

本文介绍了坦克大战游戏的角色设计及其实现方式。通过定义Actor接口并实现tick方法,游戏中的各种角色如坦克、子弹等能在每一帧更新状态,进而使整个游戏运行起来。

有了游戏所需的图象及声音资源后,下面就可以开始定义游戏中的各种角色。为了方便起见,坦克大战游戏中定义了一个角色接口。

public interface Actor{ //////////////////////////////////////////////////////////////////////////// /** * Operation be done in each tick. */ void tick(); }


该接口有一个tick方法,为每个游戏帧该角色所要完成的动作,比如说背景可能要更换图形以形成动画效果(如水面波浪)。坦克可以完成前面一步,子弹飞行等等。
坦克大战游戏中定义了背景类BattleField ,子弹Bullet,各种坦克类(Tank, PlayTank, EnemyTank, FastTank, HeavyTank, SimpleTank, PlayerTank,SmartTank) , 升级法宝Powerup,以及动态显示的分数Score类,都实现了Actor接口。
而这些角色类同时又是Game API中 Layer的子类。因些游戏逻辑比较简单,下面代码是GameScene中线程Run的方法,为游戏进行时主线程

public void run(){ Thread currentThread = Thread.currentThread(); try { while (currentThread == animationThread) { long startTime = System.currentTimeMillis(); // Don't advance game or draw if canvas is covered by a system // screen. if (isShown()) { tick(); if(hasSurface){ Canvas canvas=holder.lockCanvas(); updateGame(canvas); holder.unlockCanvasAndPost(canvas); } } timeTaken = System.currentTimeMillis() - startTime; if (timeTaken < MILLIS_PER_TICK) { synchronized (this) { if(MILLIS_PER_TICK > timeTaken){ wait(MILLIS_PER_TICK - timeTaken); timeTaken = System.currentTimeMillis() - startTime; } } } else { Thread.yield(); } } } catch (InterruptedException e) { } }


而其中的tick()方法就是调用游戏中所有角色的tick()方法:

private void tick(){ for(int i=0;i<TOTALLAYERS;I++){ Layer layer=layerManager.getLayerAt(i); if(layer.isVisible()){ Actor actor=(Actor)layer; actor.tick(); } } applyGameLogic(); }


这样参与游戏中的各个角色完成自已每帧所需要更新,整个游戏就动起来了。

在后面的文章将主要介绍各个角色类的基本实现方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值