MAGNITUDE−Μ

2008-11-07

スリム化小ネタ

整数型のdupされた連続領域(たとえばY座標ey、X座標ex、方向ew、速度ev)を

一時的に保管し、条件によって元に戻すような処理。

dim dmy,4
(中略)
memcpy dmy,ey,32
…Y座標ey、X座標ex、方向ew、速度evから移動後の座標、速度、向きを求める処理。
if 進めるかどうかのチェック {
  memcpy ey,dmy,32 ; 進めないなら4値とも元に戻したい
}

連続領域であることを利用してeyから32バイト分を別途用意した配列dmyにCopyしていますが、

memcpy dmy,ey,32 は dmy=ey,ex,ew,ev とすればdimが不要になる分、サイズ削減できます。

メリットとして「進めないなら座標と向きは元に戻すが速度を0にしたい」という場合は

dmy=ey,ex,ew,0 としておけばOK。

また応用として「進めないときの速度は、キャラクター属性ezが1なら停止、0ならバック」

としたいときは、dmy=ey,ex,ew,(ez-1)*ev のように書けます。

トラックバック - http://d.hatena.ne.jp/ANSUKOEMU/20081107