操作

この章では、オブジェクトをキーボードで操作する方法と、関数の使い方を学びます。

関数とは

何度も使いたい処理を定義して、再利用可能にしたものを関数と呼びます。

今回は、キーボードからの入力を判断して、オブジェクト(プレイヤーやカメラ、敵など)を操作する処理を関数として定義し、ゲームループから何度でも呼び出せるようにしておきます。

CODE

今回から、複数ファイルを使います。
ゲームループが記述されているメインのファイルを「game2.bb」とし、関数が定義されているファイルを「gamefunction2.bb」とします。
次章以降も使っていくので、サンプルコードを書くときには注意してください。

game2.bb

Include "gamefunctions2.bb" 

Graphics3D 640,480,16,2
SetBuffer BackBuffer()
cam1 = CreateCamera()
CameraViewport cam1,0,0,640,480

light1=CreateLight()
cube1=CreateCube()
PositionEntity cube1,0,0,10
sphere1=CreateSphere()
PositionEntity sphere1,0,0,20

;EntityParent cam1,cube1

While Not KeyHit(1)

    object_key_control( cam1 )
    random_move ( sphere1 )

    UpdateWorld
    RenderWorld

    Text 50,50,"Use arrow keys to control"

    Flip
Wend

End

gamefunctions2.bb

Function object_key_control( obj )
    If KeyDown( 200 )=True Then MoveEntity obj,0,0,1
    If KeyDown( 208 )=True Then MoveEntity obj,0,0,-1
    If KeyDown( 203 )=True Then TurnEntity obj,0,2,0
    If KeyDown( 205 )=True Then TurnEntity obj,0,-2,0
End Function
Function random_move ( obj )
    direction = Rand(1,2)
    MoveEntity obj,0,0,.5
    Select direction
         Case 1
              TurnEntity obj, 0, 10, 0
         Case 2
              TurnEntity obj, 0, -10, 0
    End Select
End Function

NEW COMMANDS

Include "gamefunctions2.bb"
...
object_key_control( cam1 )
Includeコマンドで「gamefunction.bb」を呼び出しています。Includeコマンドで別ファイルを呼び出すことで、そのファイルに定義してある関数が使えるようになります。

Function object_key_control( obj )
    ...
End Function
上記の記述の仕方で関数を定義できます。Function ~ End Functionまでが関数です。
object_key_controlというのが関数の名前で、自由につけることができます。
カッコの中のcam1が引数の定義で、関数呼び出し時に指定する値になります。

    If KeyDown( 200 )=True Then MoveEntity obj,0,0,1
    ...
    If KeyDown( 203 )=True Then TurnEntity obj,0,2,0
Ifコマンドでロジックが書けます。この関数内では、特定のキーが押されたらobjを移動させる、または回転させる。ということを行っています。
キーコードは数値で指定しますが、上記の例で指定しているキーは矢印キーです。キーコードの一覧はキーコード一覧を参照してください。

    direction = Rand(1,2)
この場所ではRandコマンドで乱数を生成して、進む方向を決めています。
    Select direction
         Case 1
              TurnEntity obj, 0, 10, 0
         Case 2
             ...
    End Select
ランダムで 1 か 2 がdirection変数に代入されます。
SelectCaseコマンドで direction が 1 の場合と 2 の場合の処理を書くことができます。
上記の例では、direction が1の時は右に回転し、2 の時は左に回転します。

やってみよう!!!

;EntityParent cam1,cube1
  1. 上記の行のセミコロンを消して動きを確かめてみよう。
  2. コントロールキーを変更してオブジェクトを縦に上下するように修正してみよう。
最終更新:2012年12月27日 16:44