【Prominence3D】もよろしく!!
あのRPGツクールの開発部もおすすめする
2Dゲーム用の3Dエフェクト作成ソフト!!
無料体験版を是非触ってみてください!!
トップページ > HSPのひきだし > ★の表示
2013年04月07日

★の表示

Pocket

★の表示と移動

次に今回のゲームの敵キャラにあたる★を表示します。

最終的に★は大量に出しますが、とりあえずは1個だけ出したいと思います。

プログラム的には●を表示したのと変わりありません。

一気に書いちゃいましょう。

    ;スクリーンを作成
    screen 0, 800, 480

    ;自機の位置
    player_x = 100
    player_y = 200

    ;星の位置
    star_x = 800
    star_y = rnd(480-32)

    ;フォントの設定
    font "MS ゴシック", 32

*メインループ

    (一部省略)

    ;星の移動
    star_x –= 5

    ;星の表示
    color 255, 255, 0
    pos star_x, star_y
    mes "★"


    await 16
    goto *メインループ

気にすべき点は、★の最初の位置ですね。

04_01

★は上の図の赤い部分から出てきます。

star_xには800を代入しています。

スクリーンの横幅が800なので、最初の位置を800にしておけば、
画面外から★が出てきます。

star_yはランダムな値になっています。

スクリーンの高さが480なのでrand(480)としたいところですが、
そうしてしまうと画面外に出てしまう可能性があります。

ここで指定するのは★の左上の位置です。

もし、star_yが480だと下図のようになります。

04_02
こうなってしまっては★が見えなくなってしまうので、
ランダムの最大値からフォントサイズである32を引いています。

これで、★の縦方向の位置はスクリーン内のいずれかになります。

ちなみに「rand(480-32)」と書いていますが、
当然「rand(448)」と書いても同じです。

 

本当のランダム

★はランダムな位置から出てくるはずなんですが、
何度も実行してると同じ位置から出てくるのに気づきましたか?

実はコンピューターというのはとても生真面目な性質なので
「適当な数」と言われても何らかの計算をして求めているんですね。

で、特に何もしないと、毎回同じ値を「ランダムな値」として出してきます。

そこで、プログラムの先頭に、この1行を追加してください。

    ;乱数の初期化
    randomize

    ;スクリーンを作成

これを入れると、rand関数は毎回違う値を出してきます。

rand関数を使う場合は、必ずこのrandomizeを先頭の方に書いてください。

 

移動速度もランダム

毎回違う位置から★が出てくるようになったところで、
速度もランダムにしてみましょう。

今は5ドットずつ動いていますが、2~6ドットずつ動くようにしましょう。

特に難しくないですね?

    ;星の位置
    star_x = 800
    star_y = rnd(480-32)

    ;星の速度
    star_speed = rnd(5) + 2


    ;フォントの設定
    font "MS ゴシック", 32

*メインループ

    (一部省略)

    ;星の移動
    star_x -= star_speed

速度が毎回変わるので、移動速度を入れる変数を用意します。
“数”が“変”わる場合は「変数」を使うんですね。

 

左端までいったら・・・

★が左端まで移動したら、また右端のランダムな位置から、
ランダムな速度で出てくるようにしましょう。

左端についたかどうかは、star_xの値を見れば分かりますね?

star_xが0になっていれば左端まで来たということです。

ただし、star_xが0になった時に星を右端に移動させると、
左端についた瞬間に★が消えてしまい、違和感があります。

そこで、すこし通り過ぎてから右端に移動させるようにしましょう。

フォントサイズが32なので、star_xが-32より小さくなっていれば、
確実に画面の左端へ消えた後になります。

    ;星の表示
    color 255, 255, 0
    pos star_x, star_y
    mes "★"

    ;★が左端に出た
    if(star_x < -32){
        star_x = 800             ;ふたたび右端へ
        star_y = rnd(480-32)     ;高さはランダム
        star_speed = rnd(5) + 2  ;速度もランダム
    }


    await 16
    goto *メインループ

これで、永遠に★が出てくるようになったと思います。

 

今回のポイント

  • rnd関数を使うときはプログラムの先頭の方に「randomize」と書く。

Pocket


コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

 ■ツール  ■ゲーム  ■講座  ■素材  ■その他  ■管理人へ
  Prominece3D   ウディタミネンス   エフェクト画像の描き方   戦闘エフェクト素材   CG作品   お問い合わせ
  Relocater   ツクルミネンス   ロゴの描き方   投稿エフェクト   書籍   管理人を応援
  Prominece     HSP講座      
           

Copyright © 2011-2018 藤宮翔流 All Rights Reserved.