Packagenet.wonderfl.game.infinity_tank.development
Classpublic class TankBase
InheritanceTankBase Inheritance flash.display.Sprite

タンクの描画とAIを実装するクラス.



Protected Properties
 PropertyDefined by
  _bulletRenderer : String
この戦車の弾のswfのurl.
TankBase
  _scene : BattleScene
ゲームの現在の状態が保持されています.
TankBase
  showStats : Boolean
[write-only] デバッグ用.
TankBase
  _world : GameWorld
プレビュー・モードでの物理演算用です.
TankBase
Public Methods
 MethodDefined by
  
TankBase
  
action():int
ここでタンクの次の行動を実装します.
TankBase
  
draw($bitmapData:BitmapData):void
タンクの見た目を描画します.
TankBase
  
fire():void
このタンクが弾を発射するときに呼ばれるコールバックです.
TankBase
  
hit():void
タンクに弾が当たったときに呼ばれるコールバックです.
TankBase
Protected Methods
 MethodDefined by
  
_init():void
このクラスのインスタンスがステージ上に配置されたときに実行されるメソッド.
TankBase
  
enterFrameHandler(e:Event):void
wonderflの画面内のプレビュー・モード時にのみENTER_FRAMEのイベント・ハンドラとして登録されます.
TankBase
Property detail
_bulletRendererproperty
protected var _bulletRenderer:String

この戦車の弾のswfのurl. swfのドキュメントクラスは、BulletRendererクラスの拡張でなければなりません.

See also

_sceneproperty 
protected var _scene:BattleScene

ゲームの現在の状態が保持されています.
ゲームの現在の状況はこのプロパティから取得します.

showStatsproperty 
showStats:Boolean  [write-only]

デバッグ用.

Implementation
    protected function set showStats(value:Boolean):void

See also

_worldproperty 
protected var _world:GameWorld

プレビュー・モードでの物理演算用です. ゲーム・モードでは使われることはありません.

Constructor detail
TankBase()constructor
public function TankBase()
Method detail
_init()method
protected function _init():void

このクラスのインスタンスがステージ上に配置されたときに実行されるメソッド. wonderflの画面内で戦車をプレビューするときにだけ実行されます.

action()method 
public function action():int

ここでタンクの次の行動を実装します.

処理落ちが無ければ、30FPSで5フレームに1回このメソッドは呼ばれます.FPSが正常値であれば、1/6秒間隔で実行されます.

Returns
int — Commandクラスで定義されている整数のフラグを利用します.

See also


Example
override public function action():int
{
    // 弾を撃つ
    var action:int = Command.FIRE;
    // タンクを前進させる.
    action |= Command.TANK_MOVE_FORWARD;
    
    // 敵の位置を取得
    var enemyPos:WVector2D = _scene.enemyTankPosition;
    // 自分の位置を取得
    var myPos:WVector2D = _scene.myTankPosition;
    
    // 自分の位置からみた敵の位置を取得
    enemyPos.subtract(myPos);
    // 自分の位置からみた敵の位置を方角に直す
    var angle:Number = Math.atan2(enemyPos.y, enemyPos.x);
    // 自分の砲台が向いている方角と敵の方角との差をとる
    angle -= (_scene.myGunAngle + _scene.myTankAngle);
    
    // 角度を0~2πに直す.
    angle = WMath.modulo2PI(angle);
    
    // 砲台を適切な角度に向ける.
    
    // 角度が180度以下なら敵は砲台より右側にいる.
    if (angle < Math.PI) action |= Command.GUN_TURN_RIGHT;
    // 角度が180度以上ということは敵は砲台より左側にいる.
    else if (angle > Math.PI) action |= Command.GUN_TURN_LEFT;
    
    return action;
}
         

draw()method 
public function draw($bitmapData:BitmapData):void

タンクの見た目を描画します.

_scene.myTankPositionで位置を取得します.
これらの位置が中心座標となっていることにご注意下さい.
戦車の大きさは、幅30px X 縦50pxで、x軸方向を0度とします.
_spBatteryは_spTankの子供のスプライトです.
もし、タンクを親子関係にしないのであれば、
_spBattery.rotation = _scene.myGunagnle + _scene.myTankAngle
となることにご注意下さい.

Parameters
$bitmapData:BitmapData — $bitmapData ステージと同じ大きさのビットマップが渡されます.

See also


Example
private var _spBattery:Sprite;                                         // 砲台のグラフィック
private var _spTank:Sprite;                                            // 戦車のグラフィック
private var _mat:Matrix;                                               // drawメソッドでの表示位置の調整用
private var _ctfm:ColorTransform = new ColorTransform(1, 1, 1, 0);     // BitmapDataを消去する

override public function draw(bitmapData:BitmapData):void
{
    // 砲台を回転させる.
    // _spTank.addChild(_spBattery);
    _spBattery.rotation = _scene.myGunAngle * 180 / Math.PI;
    
    // タンクの座標と傾きをセットする
    _mat.identity();
    _mat.rotate(_scene.myTankAngle);
    _mat.translate(_scene.myTankPosition.x, _scene.myTankPosition.y);
    
    // bitmapDataを一旦クリアする
    bitmapData.colorTransform(bitmapData.rect, _ctfm);
    // bitmapDataを描画する
    bitmapData.draw(_spTank, _mat, null, null, null, true);
}
         

enterFrameHandler()method 
protected function enterFrameHandler(e:Event):void

wonderflの画面内のプレビュー・モード時にのみENTER_FRAMEのイベント・ハンドラとして登録されます. 通常のゲーム・モードでは使われません.

Parameters
e:Event — e
fire()method 
public function fire():void

このタンクが弾を発射するときに呼ばれるコールバックです. 人間対AIのゲーム・バランスのために、同画面内に最大3発しか弾は撃てません.実際に弾が撃たれたかどうか を調べたり、弾が発射されるときに音を鳴らすなどの処理を書いたりします.

hit()method 
public function hit():void

タンクに弾が当たったときに呼ばれるコールバックです.