スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

AS3.0 練習めも 2

・練習2回目 キャラを動かしたい

さて、とりあえずaddEventListenerを頻繁に使用する、ということは分かった。
このイベントリスナーってやつの使い方だが、

『動かすもの.addEventListener(イベント.イベントの種類,関数)』

と、今はこう認識しておこう。
すなわち「あるイベントが起こったときに動かすものに関数という現象が起きますよ」と。

このことを踏まえて、今回の目標は「キャラクターを動かしてみよう」ということ。
こうやって逐一目標立てていくと練習もやりやすそうだ。
ちなみに最終目標はシューティングゲーム的なものを作ること。
あくまで「AS3.0に慣れる」という意味での目標ですがね。MXのときもそんな感じに覚えていったはず。
だけどゲームとして完成させるかどうかはわからない。気負いすぎると確実に失敗するだろうし。

まあ、実際にやってみようか。
ステージ上に、32×32の正方形を書いてムービークリップに変換。
ply」というインスタンス名を与えます。

MXの頃はこのplyに直接スクリプトを書き込めたんだけど、今はそういうことできないのな。
今回はメインフレームにスクリプトを書いていこう。

さてaddEventListenerの使い方を踏まえるなら、
『ply.addEventListener(キーが押されたとき,動かす関数)』となればいいわけだ。
キーが押されたとき、に該当するのが「KeyboardEvent.KEY_DOWN」、
動かす関数を「pmove」とでもしよう。moveは使われてた。

次はこの「pmove」関数の設定。
functionはMXでもさんざんお世話になったが、当然AS1とAS3とじゃ使い方が違うわけで。
手元の本によるとreturnで返す値のないfunctionはメソッドと呼ぶらしいがね。専門用語とかわかんないよ。
function 関数名(引数:データ型,引数:データ型, ...その他):データ型{
}


手元の本を参照するとこういうことになる。引数の数が決まってない場合には「...その他」って書けばいいらしい。
「その他」の部分には適当な文字列をぶちこめばいい。

自分の言葉で解釈するならこういうことになる。

function 関数名(関数の中で使う値:データ型の指定, ...その他):関数のデータ型を指定{
}

こんなとこだろうか。
さてpmove関数だ。戻り値がないので関数のデータ型はvoidとするらしい。
引数は特に指定することなさそうなんだが。

function pmove(???):void

関数の中身を考えよう。
とりあえずキーが押されたらplyがx方向に10進むとしようか。
で、手持ちの本を見ながら書くとこうなる。

function pmove(event:KeyboardEvent):void {
  var tgt:MovieClip = event.target as MovieClip;
  tgt.x+=10;
}


うーん。まあ一個ずつ見てこうか。
まず「var tgt:MovieClip = event.target as MovieClip;
tgtというのは対象となるムービークリップのこと。これは自分で名付けた変数。それに「:MovieClip」でデータ型をムービークリップとして指定してる。
as」は演算子の一つらしい。「event.target」の対象となったものが本当にムービークリップなのかをチェックしてるんだろう。
チェックするだけならas以下は必要ねーじゃん、と思って消したらコンパイルエラー。

「1118:静的型Objectの値が、関連しない可能性が高い型flash.display:MovieClipに暗黙で型変換されています。」

だってさ。もちろん何言ってんのか全然分かりません。
ヘルプのasの項目を見ても意味わかんねーし。
仕方ないので、これはこういうもんだ、と割り切ってしまう他ないですね。
あとこれも解せないんだけど、引数のとこの「event:KeyboardEvent」は書かないと「1120:未定義のプロパティeventへのアクセスです」と怒られる。
だからよく分からないけど書いておかないといけない。
event.target」ってのは、「対象となってるものを指定しましたよ」、とかそういうことなんだろう。
すなわち『tgtに、ターゲットとなってるムービークリップ(ここではply)を代入しますよ』、ってとこか。

で、そのtgtを次の行でxに+10してるわけだよ。するとキーを押すとターゲットとなるplyが右に10動くって寸法だ。

ここまで書いて、

ply.addEventListener(KeyboardEvent.KEY_DOWN,pmove); 
function pmove(event:KeyboardEvent):void {
  var tgt:MovieClip = event.target as MovieClip;
  tgt.x+=10;
}


だけどこのままでは作動しない。
前回のサンプルによると、「addEventListenerstage以外を指定した場合にはフォーカスを与えないと作動しない」とのこと。
すなわち「stage.focus = ply;」の一文を2行目に追加するわけだ。

ply.addEventListener(KeyboardEvent.KEY_DOWN,pmove);
stage.focus = ply;
function pmove(event:KeyboardEvent):void {
  var tgt:MovieClip = event.target as MovieClip;
  tgt.x+=10;
}

ここまでやってようやく動いた。
やったー。キーを押したらplyが10右に動いたよー。

さんぷる

( ^ω^)・・・
(#^ω^)ビキビキ
動かねえじゃねえか!

…まあそもそも俺がやりたいのはそういうことじゃないよな…。
「特定のキーを押したら」「キャラが特定の方向に移動する」ということをやりたいので、KeyboardEvent.KEY_DOWNではダメな気がしてきた。
むしろここはEnterFrameの出番だよな?
上のサンプル、初期状態ではplyの周りを黄色い四角がかこっている。フォーカス状態なんだろうけど、ステージ上どこかをクリックするとフォーカス外れてもう動かない。
いや、ローカルでは動いたのよ?ほんとだよ?でもブログに貼ったら作動してないっていう。
とにかく、これじゃやっぱダメだなあ…。

そんなわけでやり直し。 まあ多少の勉強にはなったよ。
次回に続く。

関連記事
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

oisu-

Author:oisu-
趣味はゲームと深夜アニメ実況。
絵を描いたりFlashゲーを作ったりもするけど、一つのことにのめり込むと他のことがおざなりになるので結局あまり成果が出ない。その上根気が続かないのですぐ飽きる人。

pixivb

FC2カウンター
検索フォーム
カレンダー
09 | 2017/10 | 11
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 31 - - - -
円卓の生徒
円卓の生徒応援バナー

XBOX360用ダンジョンRPG『円卓の生徒』を全力で支援中!
Twitter

Twitter Updates

    follow me on Twitter
    広告
    円卓の生徒応援バナー


    ここからアフィ注意
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。