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

自機の表示

Pocket

ウィンドウを表示

まずは、ウィンドウを表示しなければ始まりません。

今回は、ワイド型スクリーンの比率に合わせて800×480ピクセルの
ウィンドウにしましょう。

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

 

自機を表示する

今回のゲームの自機は、画像ではなく、文字の「●」です。

つまり、mes命令で表示できます。

表示する位置はどこにしたらいいでしょうか?

自機は移動するので、位置は常に変化します。

ということは・・・・変数を使います。

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

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

その変数の位置に、緑色で●を表示しましょう。

ついでに、そのままだと少し小さいので、フォントのサイズを32にします。

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

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

    ;自機を表示
    color 0, 255, 0
    pos player_x, player_y
    mes "●"

これで、左から100、上から200の位置に、緑色で●が表示されると思います。

 

自機を移動させる

自機は、カーソルキーの押した方に移動しますが、
キー入力は次ページ以降で説明するとして、
とりあえず単純に右方向に移動させてみましょう。

変数player_xとplayer_yは、ウィンドウの左上からの距離を表しています。

つまりplayer_xの値を大きくすれば右に移動します。

    ;自機を表示
    color 0, 255, 0
    pos player_x, player_y
    mes "●"

    ;自機移動
    player_x = player_x + 5

これで実行すれば移動するでしょうか・・・?

しませんね。

これは、表示した後に変数の値を変えただけなので意味がありません。

移動させるためには、表示→移動→表示→移動→・・・を、
繰り替えさなければなりません。

繰り返し処理は以前repeat-loopを紹介しました。
それを使ってもいいのですが、今回は違う方法を紹介します。

次のように追加してください。

*メインループ
    ;自機を表示
    color 0, 255, 0
    pos player_x, player_y
    mes "●"

    ;自機移動
    player_x = player_x + 5

    await 16
    goto *メインループ

awaitは前に紹介したから大丈夫ですね?

「*メインループ」と書いていますが、これは「ラベル」と呼ばれるものです。

先頭に「*」をつければラベルになります。「*」の後ろは何でもOK。

で、ラベル自体は何かをする命令ではなく、
プログラム中にはさむ 「しおり」のようなものです。

なお、ラベルは先頭に空白を入れず、左端に書くのが通例です。

で、最後に追加した「goto *メインループ」。
これは「“*メインループ”というラベルのところにジャンプしろ」いう意味の命令です。

歌の歌詞によくある「※くりかえし」ってやつに似てますね。

これで、表示→移動→表示→移動→・・・を
1秒間に約60回繰り返すことになります。

実行してみましょう。

残像が残るので、太い線が伸びていくように見えますが、
●が右に移動している証拠です。

 

「repeat – loop」と「goto」の使い分け

さて、今回新しいループの方法を紹介しました。

ですが、今回のプログラムをrepeat – loopで書いても特に問題はありません。

では、どういう時はrepeat – loop を使い、
どういう時はgotoを使ってループを書けばいいのでしょうか?

これに関しては、特に正解はないのですが、次のように考えてください。

【repeat – loopがいいパターン】
・ループ回数が決まっている場合
・ループさせる処理があまり多くない場合

【gotoがいいパターン】
・ループ回数が決まってない場合
・ループさせる処理がある程度多い場合

今回のループは、★にぶつかってゲームが終了するまで
繰り返すわけですから、実際何回ループするか分かりません。

こういう場合はgotoを使ったほうがいいと思います。

 

画面をクリアする

●を移動させましたが、
残像が残っているので1本の線のようになってしまっています。

ちゃんと移動しているように見せるには、
一度表示した●を消してからちょっと右に移動する必要があります。

今回のゲームは、完成版サンプルを見てもらうと分かるとおり、
背景は青で塗りつぶしているので、
●を表示する前に画面を青一色で塗りつぶしましょう。

塗りつぶすには「boxf」命令を使います。

*メインループ
    ;画面をクリア
    color 0, 0, 255
    boxf


    ;自機を表示
    color 0, 255, 0
    pos player_x, player_y

boxfは「Box(四角く) Fill(塗りつぶす)」の略で、
画面全体を塗りつぶす命令です。

これで、画面真っ青→●表示→移動→画面真っ青→●表示→移動→・・・
というループになり、●が移動しているように見えると思います。

なお、PCのスペックによっては●がチラつく場合もありますが、
あとで修正しますので、とりあえず我慢しておいてください。

 

今回のポイント

  • 「*○○○」と書くことでラベルという目印をつけることができる。

  • 「goto *○○○」と書くと、指定したラベルの位置に ジャンプする。

  • 「boxf」と書くと、画面全体を塗りつぶす。

Pocket


コメントを残す

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

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

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