HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
1021
くみ敵の動かし方(初心者)4解決


くみ

リンク

2018/10/21(Sun) 21:49:59|NO.85645

HSP初心者です。現在アンダーテールのようなゲームを作ろうとしており、苦戦しております。
自力でなんとかキャラクター(赤い丸)をうごかして、白いブロックに当たると、pgetで当たり判定
するようにできました。今回の質問は、白い敵を動かしたり、変形させたりする方法についてです。
以下スクリプトのstageoneにすすむと、そこに白いはこがあるのですが、それにあたると、ゲームオーバー
になるようにし、白い箱が自在にに動いたり大きくなったりして、それをかわしながら、行動パターンをおぼえ、
クリアできるようなゲームにしたいです。ところが、白い箱を動かす方法がよくわかりません。
アドバイスの方なにとぞよろしくお願いします。

screen 0,900,550 x=435 y=250 *menu redraw 0 color 0,0,0 boxf color 255,0,0 circle x,y,x+20,y+20 pos 405,100 font "丸ゴシック",16 color 255,255,254 boxf 400,130,490,155 mes "STAGE ONE" color 0,0,0 pos 415,133 font "丸ゴシック",20,1 mes "ENTER" getkey left,37 if left=1 : x-4 getkey right,39 if right=1 : x+4 getkey up,38 if up=1 : y-4 getkey down,40 if down=1 : y+4 getkey esc,8 if esc=1,end pget x+10,y if ginfo_b = 254 : goto*stageone pget x,y+10 if ginfo_b = 254 : goto*stageone pget x+10,y+20 if ginfo_b = 254 : goto*stageone pget x+10,y+10 if ginfo_b = 254 : goto*stageone if x>882 : x=882 if x<0 : x=0 if y<0 : y=0 if y>532 : y=532 redraw 1 goto*menu stop *stageone redraw 0 color 0,0,0 boxf color 255,0,0 circle x,y,x+20,y+20 color 255,255,254 boxf 100,100,150,150 getkey left,37 if left=1 : x-4 getkey right,39 if right=1 : x+4 getkey up,38 if up=1 : y-4 getkey down,40 if down=1 : y+4 getkey esc,8 if esc=1,end pget x+10,y if ginfo_b = 254 : goto*gameover pget x,y+10 if ginfo_b = 254 : goto*gameover pget x+10,y+20 if ginfo_b = 254 : goto*gameover pget x+10,y+10 if ginfo_b = 254 : goto*gameover if x>882 : x=882 if x<0 : x=0 if y<0 : y=0 if y>532 : y=532 redraw 1 goto*stageone stop *gameover cls color 0,0,0 boxf color 255,255,255 mes "GAMEOVER" stop <pre/>



この記事に返信する


あらや

リンク

2018/10/22(Mon) 03:48:51|NO.85651

質問が少々ザックリしています。
白い箱をどう動かしたいのかという目的を明確にしてください。

単に直線の往復移動(上下、もしくは左右に動く)のか
ジクザクに(/\/\/ このように)動くのか
三角関数のsin波・またはcos波のように(〜〜〜 このように)動くのか
円運動なのか
螺旋運動なのか

まだまだありますが、
一定のパターンで動くといっても選択肢が多すぎてどう答えればいいのかわかりません。

それとも、なんでもいいから何らかのパターンで動かす方法ということでしょうか?



くみ

リンク

2018/10/22(Mon) 21:27:14|NO.85656

すいません!理想的にはジグザグと上下左右をしたいです!また、加速したり減速したりできたら
とも思っています!取り合えず、この二種類の運動のしかたと、速度の変更の仕方を教えていただ
けたらとおもいます。



あらや

リンク

2018/10/23(Tue) 01:16:29|NO.85659

とりあえず簡単に左右に往復する直線移動です。

コメントを書いた箇所が追加したり変更した箇所で
コメントのままですが変数 cube_mx が横方向の移動量で0にすると横には移動しません。
同様に cube_my が縦方向でこれを適当な数字を入れるとそれに合わせて縦移動します。

cube_mx、cube_my の両方を0以外の数値にすると斜め移動してジグザグに動きます。

そして変数 cube_speed が速度です。
cube_mx、cube_my のそれぞれにこれを乗算するので
増減させると速度が上がったり下がったりして加速・減速の表現が出来るようになります。
また乗算しているという事で、cube_speed を0にすると
完全に停止して縦横どこにも動きません。


screen 0,900,550 x=435 y=250 screen_sx = 900; // 画面サイズ横 screen_sy = 550; // 画面サイズ縦 cube_px = 100; // 箱 左上座標X cube_py = 100; // 箱 左上座標Y cube_size = 50; // 箱 大きさ cube_mx = 1; // 箱 横方向の移動量 cube_my = 0; // 箱 縦方向の移動量 cube_speed = 4; // 箱 移動速度 ///////////////////////////////////////////////////////////// // メニューの処理は省略 ///////////////////////////////////////////////////////////// *stageone redraw 0 color 0,0,0 boxf color 255,0,0 circle x,y,x+20,y+20 color 255,255,254 ;boxf 100,100,150,150 // 変数に変更 // 箱の表示 boxf cube_px, cube_py, cube_px + cube_size, cube_py + cube_size; getkey left,37 if left=1 : x-4 getkey right,39 if right=1 : x+4 getkey up,38 if up=1 : y-4 getkey down,40 if down=1 : y+4 getkey esc,8 if esc=1,end pget x+10,y if ginfo_b = 254 : goto*gameover pget x,y+10 if ginfo_b = 254 : goto*gameover pget x+10,y+20 if ginfo_b = 254 : goto*gameover pget x+10,y+10 if ginfo_b = 254 : goto*gameover if x>882 : x=882 if x<0 : x=0 if y<0 : y=0 if y>532 : y=532 redraw 1 gosub *cube_move; // 箱の移動処理 await 17; // 追加(ウェイトを入れないと応答なしになる) goto*stageone ;stop // 不要 *gameover cls color 0,0,0 boxf color 255,255,255 mes "GAMEOVER" stop // 箱の移動処理 *cube_move cube_px += cube_mx * cube_speed; // 箱の表示位置を更新する処理(横方向の移動) // ↓この行は画面の端に行ったら移動する向きを逆向きに変更する処理 if( ((cube_mx > 0) && (cube_px >= (screen_sx - cube_size))) || ((cube_mx < 0) && (cube_px <= 0)) ) : cube_mx = -cube_mx; cube_py += cube_my * cube_speed; // 箱の表示位置を更新する処理(縦方向の移動) // ↓同上 if( ((cube_my > 0) && (cube_py >= (screen_sy - cube_size))) || ((cube_my < 0) && (cube_py <= 0)) ) : cube_my = -cube_my; return;


そして箱の移動に直接関係が無いので省略しましたが、

ゲームのループと同じく
メニューのループ最後のstopは不要ですし、
こちらもウェイトを入れた方が無難かと思います。



くみ

リンク

2018/10/24(Wed) 07:28:20|NO.85677

ありがとうございます!!これでいろいろいじってみます。stopいらないのですね!waitでやってみます。



ONION software Copyright 1997-2023(c) All rights reserved.