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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0212
nyoro横スクロールゲーム4未解決


nyoro

リンク

2012/2/12(Sun) 20:01:45|NO.44814

横スクロールのマリオみたいなゲームを作りたくて、参考書などを見ながら、今ある知識で下のようなプログラムを組みました。

これを右に一定間隔でスクロールさせ、かつその中で自分のキャラをなめらかに動かすには、どのようにすればよいでしょうか?


screen 0,800,600


randomize

boxf




color 0,200,0

x=0
y=300
z=50
v=600

boxf x,y,z,v

*start

A=rnd(5)

if A=0:goto*Aルート;下がるパターン
if A=1:goto*Bルート;上がるパターン
if A=2:goto*Cルート;落とし穴パターン
if A=3:goto*Aルート;下がるパターン
if A=4:goto*Bルート;上がるパターン


*Aルート
x=x+50
y=y+rnd(0-20)
z=z+50
v=v

boxf x,y,z,v

wait 500

goto *start

*Bルート
x=x+50
y=y-rnd(0-20)
z=z+50
v=v

boxf x,y,z,v

wait 500

goto *start


*Cルート

color 0,100,100
x=x+50
y=350
z=z+50
v=v

boxf x,y,z,v



wait 500

color 0,200,0
y=300


goto *start


stop



この記事に返信する


Ve

リンク

2012/2/12(Sun) 20:13:27|NO.44815

んー・・・

先にキャラクターの描画と動作を作った方が良いかな。


それに、このマップで、マリオのように動かすのは大変だよ・・・。



これを右に一定間隔でスクロールさせ、 かつその中で自分のキャラをなめらかに動かすには、 どのようにすればよいでしょうか?

まず、1ステージの全体マップをバッファに生成

プレイヤーキャラクターが画面内の左右ある程度動くと、
全体マップのバッファからスクロールした分を計算して描画すれば良い。



暇人

リンク

2012/2/13(Mon) 19:44:58|NO.44844

NO.44814を見る限り分かって無い事が多い気がする
まずは固定画面でキャラを表示して動かせるようにして
地形(背景)も一緒に表示できるようになってから

次に地形との当たり判定と地形に対してのキャラの動作を作るか
スクロールを先に作るか、地形が必要なら大抵先に当たり判定をやる
地形の作り方によって使える当たり判定が変わってくる



ぬこ

リンク

2012/2/13(Mon) 20:15:59|NO.44845

少し前にここで同じような質問を見た記憶があるのですが見つかりません…



玄冬

リンク

2012/2/14(Tue) 07:38:48|NO.44859


#enum X = 0 #enum Y #const W 50 screen 0,800,600 randomize v_ROW = ginfo_winx / W dim a_map, v_ROW repeat v_ROW a_map(cnt) = ginfo_winy / 2 loop PLAYER_Y = ginfo_winy / 2 dialog "スペースキーでジャンプして\n穴に落ちないように!" *MAIN redraw 2 gosub *sub_MAP gosub *sub_PLAYER redraw 1 if ginfo_winy < PLAYER_Y { dialog "GAME OVER" : end} await 20 LOOP_COUNT++ goto *MAIN *sub_MAP color: boxf repeat v_ROW if LOOP_COUNT \ 5 = 0 { if cnt = (v_ROW - 1) { if a_map(cnt - 1) = 820 : a_map(cnt) = 320 - rnd(41) : else : a_map(cnt) = a_map(cnt - 1) + 20 - rnd(41) if a_map(cnt) < W : a_map(cnt) = W if ginfo_winy - W < a_map(cnt) : a_map(cnt) = ginfo_winy - W if rnd(5) = 0 : a_map(cnt) = ginfo_winy + 20 } else : a_map(cnt) = a_map(cnt+1) } if cnt = 8 : color $80, $00, $FF : else : color $00, $C8, $00 boxf cnt * 50, a_map(cnt), (cnt+1) * W, ginfo_winy loop return *sub_PLAYER if v_jump { PLAYER_Y += 0.5 * v_jump - 10 v_jump++ if a_map(8) < PLAYER_Y { PLAYER_Y = a_map(8) : v_jump = 0} } else { getkey v_jump, 32 PLAYER_Y = a_map(8) } color $FF, $00, $00 : circle 0.5 * (v_ROW + 1 ) * W - 10 , PLAYER_Y - 20, 0.5 * (v_ROW + 1 ) * W + 10 , PLAYER_Y pos 0,0: mes v_jump return



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