はじめてのBGE 5

唐突に触りたくなりましたー。



~はじめてのBGE~

その8.はじめてのスクリプト

以前はスクリプト無しでカメラ、プレイヤーを動かし、ジャンプさせるまでやりました。ジャンプをキーを押している時間で3段階の強弱に分けるなどしましたら、これはもう既にわけがわからない状態になりまして、これはもうそろそろスクリプト無しでは限界だろうなっと思いました。
up_20100324110157.jpg
そもそもスクリプト言語さえなしにゲームを作ろうなどという考えが甘甘でした、あははー。

手始めにこの部分、
up_20100324110853.jpg
矢印キーでプレイヤーの移動、また進行方向へ向くという部分をスクリプトで書いてみるとこうなりました。

up_20100324111239.jpg



ほほー、結果だけ見ると明らかにこっちのほうが簡単そうです。実際の調べる時間を入れると簡単だったわけではないんですが^^; まだまだ、Jumpや回転などもスクリプトで書いてしまえば、かなりわかりやすくなりそうですね。

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
v = 0.10
r2 = 1.414
 
cont = GameLogic.getCurrentController()
own = cont.getOwner()
 
def main():
prop = cont.getSensor("isToward==True").getOwner()
face = prop.DirectFace
 
if face == 1: move(0,v,"RocN")
elif face == 2: move(0,-v,"RocS")
elif face == 3: move(v,0,"RocE")
elif face == 4: move(-v,0,"RocW")
elif face == 5: move(v/r2,v/r2,"RocNE")
elif face == 6: move(-v/r2,v/r2,"RocNW")
elif face == 7: move(v/r2,-v/r2,"RocSE")
elif face == 8: move(-v/r2,-v/r2,"RocSW")
 
def move(x,y,tractto):
#move
pos = (x,y,0)
own.applyMovement(pos,1)
#trackto
tto = cont.getActuator("trackto")
tto.setObject(tractto)
tto.setTime(5)
GameLogic.addActiveActuator(tto,1)
 
main()
 

こちらスクリプト部分です。

getSensorやgetActuatorはちゃんとロジック繋いでないと取得できません。わからなかったのが8行目でやっているオブジェクトの取得方法。ここではSensorを取得してそのOwnerを取得することで、得ましたがもっとスマートな方法が用意されている気がする。そもそもプロパティを別のオブジェクトにしているのが間違いなのかな?でも他オブジェクトのプロパティを参照したいときも多々あるよなぁ。

GameLogic.getCurrentScene().getObjectList()からほしいオブジェクトを探すという手なら思いついたけど、もっと簡単だと思うんだぁあぁ。誰か教えてください。
追記:
GameLogic.getCurrentScene().objects["object_name"]で取得するっぽい。

プロパティはオブジェクトが取得できれば、メンバ変数を取得するかのごとく取得できるのですが、結構はまりました。なんでgetPropertyとかないねーん!って喚いてました。こんな簡単にできるなんて。
追記:
249からはobject["property_name"]で取るらしい。249の仕様ってそのまま250でいけんのかな?

25行目、ダミーのActuatorを取得してるんですが、普通にスクリプト側でActuatorを作ればいいと思うんですよね。どうやんだろ。あっでも一々作ってたら処理の無駄か。というか、わざわざActuatorじゃなくても、オブジェクトを特定のオブジェクトに向かわせるメソッドか何かがあるような気がする~。



そんなこんなで大体をスクリプトで書いてみたのがこちら
up_20100327130533.jpg



まあまあ簡潔にはなったかな。こちらノートPCでやりまして、2.49はやたら重いので2.48でやりました。いくらか再現できないところがあります。Actionの挙動が些かおかしい。それにしても、サンプルが少ないから、どういう風にするのが一般的かわからない。


どうせはじめてのスクリプトなら2.5でやろうっと思ったけど、公式リファレンス読みにくすぎだ~。
関連記事

コメント

コメントの投稿

非公開コメント

このブログについて
□ ブログ内容
決まった趣旨はありません。
興味を持ったこと・日常で行ったことを何でも書きます。

3DCG・プログラミングなどが多めです。

□ 現在の活動
・ウェブサイト制作
 (http://tiblab.net)
・3Dゲーム制作
 (コックパニック)
検索フォーム
ユーザータグ

Blender キャプチャ blendファイル BGE Python GameEngine ムービー Android CG  Red5 Terragen C# C++ 

カテゴリー
プロフィール

TiBra

Author:TiBra
趣味でCG制作、プログラミング等を行っています。メイカーズに憧れています。

ネットを通じた交流を広げたく思っていますので、コメント・メールはお気軽にどぞー

戯言程度のことは、こちらのブログに投稿しています。基本戯言なので、実質移転しているようなものです。

Mail:tibraあっとlive.jp
HP:TibLabmemocode
動画:VimeoFC2動画ニコニコ
ファイル:SkyDrive
企画:3Dゲーム作業実況

Blogリンク
不都合がございましたらご連絡ください。
当ブログのリンクバナー
FC2 ID
FC2カウンター
RSSフィード+解析コード