このWikiは古くなりました:
新しいWikiへ移動
自機を動かす(2)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
//@pnavi
[[←前>マップを描く]] [[次→>敵を動かす(2)]] [[トップ>...
**自機を動かす [#c9f8d6c1]
***自機を作る [#q6a50227]
自機を作ってみましょう。[[オブジェクトを作る>オブジェクト...
&ref(mkmychar.png);
[[オブジェクトのキャラクタパターンを指定する>オブジェクト...
&ref(selPatmy_m.png);
***自機の動きを定義する [#f129b425]
自機をダブルクリックし、次のように入力します。
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
update();
}
実行してみましょう。カーソルキーの右と左で自機を動かせま...
***下に落ちる [#o06a58c2]
しかし、これだと自機が空中に浮いています。下に落ちる処理...
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
y+=3;
update();
}
これで実行すると、自機はどんどん下におちていきます。
***床やはしごの判定を加える [#k37565a8]
今度は、ずっと落ちっぱなしですね。床やはしごにあたったら...
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y)==$pat_Maze+1) y+=3;
update();
}
ここで新しく[[$map.getAt]](x,y)という命令がでてきますが、...
「(x,y)地点にあるマップのキャラクタパターンを返す」
という働きがあります
(x,y)とは自分のいる地点ですから、自分が床でもはしごでもな...
***めり込みを修正する [#b1fa5e57]
さて、実行させてみると、確かに床で止まるのですが、ちょっ...
この仕組みを説明しましょう。次の図をみてください。
&ref(merikomi.png);
これで、すこしめりこんだ理由はわかったでしょうか
めりこまないようにするには、もう少し下の点で判定をすれば...
&ref(merikomi2.png);
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y+16 )==$pat_Maze+1) y+=3;
update();
}
さて、これでうごかしてみましょう。
まだ足りないものがあります。はしごを使っての上下移動がで...
そこで、自分がはしごの上にいたら上下キーで移動できるよう...
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y+16)==$pat_Maze+1) y+=3;
if ($map.getAt(x,y)==$pat_maze+2) {
if (getkey(40)>0) y+=3;
if (getkey(38)>0) y-=3;
}
update();
}
追加した部分の解説をします。
//progfrac
if ($map.getAt(x,y)==$pat_maze+2) {
↑ここは、自分のいる場所にはしご(キャラクタパターン番号:...
はしごがある場合はif文の中の処理を行います
//progfrac
if (getkey(40)>0) y+=3;
if (getkey(38)>0) y-=3;
↑それぞれ、上や下がおされたら上または下に移動します。
実行させてみましょう。
とりあえずはしごを使って上下移動ができるようですが...?
ずっと下を押していたら、壁にめりこんでしまいました。
&ref(merikomi3.png);
プログラムをもう一度みてみましょう
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y+16)==$pat_Maze+1) y+=3;
if ($map.getAt(x,y)==$pat_maze+2) {
if (getkey(40)>0) y+=3;
if (getkey(38)>0) y-=3;
}
update();
}
下を押したら、下に移動するという処理は
//progfrac
if (getkey(40)>0) y+=3;
でやっていますが、ここに「下のほうに壁があったらとまる」...
判定を加えたほうがよさそうです。
逆にいえば「下が押されていて、かつ下に壁がなかったら、下...
先ほどの
//progfrac
if ($map.getAt(x,y+16)==$pat_Maze+1) y+=3;
という処理は
「下になにもない空間があった場合、下に移動する(落ちる)」
という処理でした。これにならって、次のようにかきなおします
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y+16)==$pat_Maze+1) y+=3;
if ($map.getAt(x,y)==$pat_maze+2) {
if (getkey(40)>0 && $map.getAt(x,y+16)!=$pat_Maze+0) ...
if (getkey(38)>0) y-=3;
}
update();
}
実行させてみましょう。自機の動きはひとまず完成です。
//@pnavi
[[←前>マップを描く]] [[次→>敵を動かす(2)]] [[トップ>...
終了行:
//@pnavi
[[←前>マップを描く]] [[次→>敵を動かす(2)]] [[トップ>...
**自機を動かす [#c9f8d6c1]
***自機を作る [#q6a50227]
自機を作ってみましょう。[[オブジェクトを作る>オブジェクト...
&ref(mkmychar.png);
[[オブジェクトのキャラクタパターンを指定する>オブジェクト...
&ref(selPatmy_m.png);
***自機の動きを定義する [#f129b425]
自機をダブルクリックし、次のように入力します。
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
update();
}
実行してみましょう。カーソルキーの右と左で自機を動かせま...
***下に落ちる [#o06a58c2]
しかし、これだと自機が空中に浮いています。下に落ちる処理...
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
y+=3;
update();
}
これで実行すると、自機はどんどん下におちていきます。
***床やはしごの判定を加える [#k37565a8]
今度は、ずっと落ちっぱなしですね。床やはしごにあたったら...
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y)==$pat_Maze+1) y+=3;
update();
}
ここで新しく[[$map.getAt]](x,y)という命令がでてきますが、...
「(x,y)地点にあるマップのキャラクタパターンを返す」
という働きがあります
(x,y)とは自分のいる地点ですから、自分が床でもはしごでもな...
***めり込みを修正する [#b1fa5e57]
さて、実行させてみると、確かに床で止まるのですが、ちょっ...
この仕組みを説明しましょう。次の図をみてください。
&ref(merikomi.png);
これで、すこしめりこんだ理由はわかったでしょうか
めりこまないようにするには、もう少し下の点で判定をすれば...
&ref(merikomi2.png);
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y+16 )==$pat_Maze+1) y+=3;
update();
}
さて、これでうごかしてみましょう。
まだ足りないものがあります。はしごを使っての上下移動がで...
そこで、自分がはしごの上にいたら上下キーで移動できるよう...
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y+16)==$pat_Maze+1) y+=3;
if ($map.getAt(x,y)==$pat_maze+2) {
if (getkey(40)>0) y+=3;
if (getkey(38)>0) y-=3;
}
update();
}
追加した部分の解説をします。
//progfrac
if ($map.getAt(x,y)==$pat_maze+2) {
↑ここは、自分のいる場所にはしご(キャラクタパターン番号:...
はしごがある場合はif文の中の処理を行います
//progfrac
if (getkey(40)>0) y+=3;
if (getkey(38)>0) y-=3;
↑それぞれ、上や下がおされたら上または下に移動します。
実行させてみましょう。
とりあえずはしごを使って上下移動ができるようですが...?
ずっと下を押していたら、壁にめりこんでしまいました。
&ref(merikomi3.png);
プログラムをもう一度みてみましょう
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y+16)==$pat_Maze+1) y+=3;
if ($map.getAt(x,y)==$pat_maze+2) {
if (getkey(40)>0) y+=3;
if (getkey(38)>0) y-=3;
}
update();
}
下を押したら、下に移動するという処理は
//progfrac
if (getkey(40)>0) y+=3;
でやっていますが、ここに「下のほうに壁があったらとまる」...
判定を加えたほうがよさそうです。
逆にいえば「下が押されていて、かつ下に壁がなかったら、下...
先ほどの
//progfrac
if ($map.getAt(x,y+16)==$pat_Maze+1) y+=3;
という処理は
「下になにもない空間があった場合、下に移動する(落ちる)」
という処理でした。これにならって、次のようにかきなおします
//prog
extends SpriteChar;
while(1) {
if (getkey(39)>0) x+=3;
if (getkey(37)>0) x-=3;
if ($map.getAt(x,y+16)==$pat_Maze+1) y+=3;
if ($map.getAt(x,y)==$pat_maze+2) {
if (getkey(40)>0 && $map.getAt(x,y+16)!=$pat_Maze+0) ...
if (getkey(38)>0) y-=3;
}
update();
}
実行させてみましょう。自機の動きはひとまず完成です。
//@pnavi
[[←前>マップを描く]] [[次→>敵を動かす(2)]] [[トップ>...
ページ名: