HSP | 球を立体的に表示・ポンポン跳ねらせる

HSP | 球 (円?) を立体的に表示 (?) ・ポンポン跳ねらせる (ように見せかけるww)

記事のタイトルと上にタイトルがほんのちょっと違うのは気にしないでください。
地面っぽいものと影っぽいものと球っぽいものを同時に表示することで立体的に見せかけてみます。

randomize // 乱数初期化

// 処理に必要な初期化
*init
ball_max=10 // ボールの個数
ddim ball_x,ball_max // ボールX座標
ddim ball_y,ball_max // ボールY座標
ddim ball_z,ball_max // ボールZ座標
ddim ball_move_x,ball_max // ボールX方向速度
ddim ball_move_y,ball_max // ボールY方向速度
ddim ball_move_z,ball_max // ボールZ方向速度
dim ball_flag,ball_max // ボール表示フラグ
ball_num=0 // 初期化するボールのID
timer=0 // タイマー

// メインループ
*main
redraw 0
// ボール設置
if (timer\(100/ball_max))=0 { // 一定時間ごと発生
gosub *ball_format // ボール初期化
ball_num+ : ball_num\ball_max // 次初期化ボールID変更
}
gosub *calc // ボール位置算出
gosub *draw // 背景やボール等表示
// その他処理
timer+ // タイマー進める
//
redraw
await 33
goto *main

// ボール初期化
*ball_format // 変数の役割は*init参照
ball_x(ball_num)=320.0
ball_y(ball_num)=240.0
ball_z(ball_num)=0.0
ball_move_x(ball_num)=8.0*rnd(2)-4.0
ball_move_y(ball_num)=4.0*rnd(2)-2.0
ball_move_z(ball_num)=-10.0
ball_flag(ball_num)=1
return

// ボール位置算出
*calc // 変数の役割は*init参照
repeat ball_max
if ball_flag(cnt) { // 表示されるボールのみ
ball_move_z(cnt)+0.5 // 加速度テキトーにつける
ball_x(cnt)+ball_move_x(cnt)
ball_y(cnt)+ball_move_y(cnt)
ball_z(cnt)+ball_move_z(cnt)
if ball_z(cnt)>0 : ball_z(cnt)=0.0 : ball_move_z(cnt)=-ball_move_z(cnt) // 跳ね返り処理
}
loop
return

// 背景やボール等表示
*draw
// 背景描画
color 255,255,255 : boxf
color 200,200,200
repeat 40
line 640*(cnt/20),40*(cnt\20)-300,640-640*(cnt/20),40*(cnt\20)+20 // 斜め線描画
loop
// おまけ。発生地点描画
color 255,255,200
circle 320-28,240-14,320+28,240+14
// ボール描画 (影とボールを同時に描画できるようにまとめた)
repeat ball_max*2 // ボールと影だから2倍 (cnt/ball_maxで影かボールかを見分け、本来のIDはcnt\ball_maxにする)
if ball_flag(cnt\ball_max) { // 表示されるボールのみ
color 200-200*(cnt/ball_max),200-200*(cnt/ball_max),200-200*(cnt/ball_max)
circle ball_x(cnt\ball_max)-28,ball_y(cnt\ball_max)-14*(cnt/ball_max+1)+(ball_z(cnt\ball_max)-20)*(cnt/ball_max),ball_x(cnt\ball_max)+28,ball_y(cnt\ball_max)+14*(cnt/ball_max+1)+(ball_z(cnt\ball_max)-20)*(cnt/ball_max)
}
loop
return

できるだけシンプルに (スクリプトに) コメント付けました。改造したいけどわかんねーよという人は (記事に) コメントで。
あと、これは最低限のことしかしてません。
常に同じ高さまで跳ねます (たぶん) 。
本当はsin,cosでちゃんとしたX,Y座標を決めるべきなのでしょうが、とりあえず作ってみたかっただけなんで、X,Y座標は絶対位置 (?) で指定してます。Z軸だけ仮想 (?) です。
今回はこれぐらいで。では。


「HSP | 球を立体的に表示・ポンポン跳ねらせる」への3件のフィードバック

  1. おおお@@ なんか可愛いです^^
    黄色い部分から湧き出てきます@@
    なかなか面白いです。確かに立体的で全く違和感がありません。いいですね^^!
    角度を色々変えて遊んでいます。

  2. おお、良く作りましたね~
    ソースをざっと見てみましたが、ループ構文や関数などはあまり使わないんですね・・・・
    hspは基本的にすべての変数がpublicなのに、よくできますね~

  3. >フェルミウム湾さん
    ありがとうございます!
    角度ですか~上や下に動かすと移動速度の都合で画面外に出る前に中央に戻ってしまうので発生速度を遅らせる必要がありそうです。
    あと、縦たい横の比率が1:2なのでほぼ60度でも少しずれます。
    とりあえず作ったものなのでその程度の能力です (汗
    ご了承ください。

    >ユウキさん
    どうもです!
    ループでにタ処理をするところは/や\を使って極力まとめたのでかなり削減で来ていると思いますw
    publicですか~普段テキトーにHSP使っている私にはわからない…orz

コメントは受け付けていません。