Skip to content
This repository was archived by the owner on Jun 6, 2020. It is now read-only.

FirstProgram

raduwen edited this page Sep 28, 2012 · 10 revisions

====

はじめてのプログラム

ウィンドウを表示する

導入編 エディタサンプルがウィンドウを表示する最初のプログラムです。

1行目のrequire "dxruby"はDXRubyライブラリの読み込みをするための文です。

Window.loop do 〜 endまでがゲームのメインループになります。 メインループの中の処理が毎フレーム実行されます。

#から後ろはコメントです。 コメントとはプログラム上に記述できる注釈でプログラムを実行する時は無視されます。

Window.loopに関してリファレンス(DXRubyリファレンス.chm)の3.1 Windowモジュールに詳しく書いてあります。 Window.loop内ではFPSを一定に保たせる処理やウィンドウに描画されたものを削除する処理など、様々な処理が行なわれています。

Windowモジュールのページにはウィンドウのサイズの変更方法やタイトル(キャプション)の変更方法なども記述してあります。

例えばWindow.loopより前にWindow.caption = "テスト"と記述してあげれば、 ウィンドウのタイトルを「テスト」に変更できます。 しかし、エラー出力を見るとinvalid multibyte char (US-ASCII)などと出てしまいます。

これは「日本語含まれてるけど文字コードは何やねん?」と怒られています。 RuviEditのデフォルトの文字コードはUTF-8なので、1行目に# coding: utf-8と追記してあげるといいでしょう。

課題-1

ウィンドウの幅(width)、高さ(height)を変更してください。

画像を表示する

画像を表示するには、まず画像を読み込まなければなりません。 画像を読み込むにはImageクラスのloadメソッドを使います。

player = Image.load("player.png")

これでファイル名が「player.png」という画像を読み込みます。ファイルは相対パスか絶対パスで指定します。 読み込んだ画像を使うためにplayerという変数に代入します。

変数とは何らかの値を保持するためのもので、数値、文字列、画像、音声など様々なオブジェクトを入れておけます。

画像は一度読み込んだらもう一度読みなおす必要がないので、Window.loopより前で1度だけ読み込みます。

さて、読み込んだだけでは描画されません。DXRubyではウィンドウへの描画メソッドは全てWindowモジュールにまとめられています。 読み込んだ画像を単純に描画したい場合Windowモジュールのdrawメソッドを使います。

Window.draw(0, 0, player)

これはウィンドウの(0,0)の位置にplayer画像を描画する、ということです。

Window.loopで毎フレーム描画した画像が更新されるので、 Window.drawWindow.loop doからendの間に記述しなければなりません。

先程から「メソッド」という言葉がでていますがこれは処理の集まりです。 例えば同じ処理を何度も記述するのが面倒なのでメソッドにしてしまい、 そのメソッドを使うとプログラムの記述量が減ったりします。 他にもメソッドにする利点が幾つかありますが今回は省略します。

Window.drawとImage.loadを見比べると,があります。引数が複数必要な場合,で区切って記述します。 引数とはメソッドに与える値のことです。 1つ目の引数を第一引数、2つ目の引数を第二引数といったりします。

Window.drawは4つの引数を持ちます。リファレンスを見てみましょう。

Window.draw( x, y, image, z=0 )

第一引数、第二引数が描画する座標で、第三引数が描画する画像を表わしています。第四引数は描画の順序です。

第四引数はz=0のようにデフォルトの値が記述されています。 このようにデフォルトの値が記述されている場合それを省略することができます。

つまり、Window.draw(0, 0, player)Window.draw(0, 0, player, 0)は同じ意味になります。 また、メソッドの括弧は省略することができます。なので、Window.draw 0, 0, playerと記述しても同じ意味になります。

プログラムの全体はdraw_image.rbのようになります。

座標系

座標系はライブラリによって異なる場合があります。DXRubyでは左上が原点になるスクリーン座標系を採用しています。

座標系

画像を右にずらして描画したければxの値を上げ、下にずらしたければyの値を上げればいいということです。

ちなみに数学でよく使ったy軸が上向きの座標系をデカルト座標系とかいいます。

課題-2

画像を複数読み込んで、画像が重ならないように描画しましょう。

コラム:変数

変数は好きな名前を付けて構いませんし、いくつ作っても構いません。 しかし、いくつかの決まり事もあります。

まず変数の名前(変数名)は半角英数かアンダースコア(_)でなければなりません。 また、変数名の1文字目は半角英字かアンダースコア(_)でなければなりません。

もう一つの約束としてRubyで定義されている予約語(キーワード)は使用できません。 予約語とは言語に予め定義されている命令とかのことを言います。

Rubyの予約語はRubyリファレンスマニュアルの字句構造に記述されています。

Rubyでは大文字から始まるものは定数になります。定数とは「変更がされない変数」と思っていただければ分かりやすいかと思います。

変数・定数には何らかの値・オブジェクトを入れておけます。

Rubyはオブジェクト指向言語という言語の一つで値(オブジェクト)は何らかのクラスに属しています。

player = Image.load("player.png")
str = "あ"
num = 10

変数1

上図のように変数は付箋のようなもので、オブジェクトに付箋を貼ってどのオブジェクトが何かが分かるようにしています。

ですので同じオブジェクトに対して複数の付箋を貼ることもできます (同じオブジェクトに対して複数の変数から扱える)。

変数2

図のようにplayerとaaaに画像を結びつけたとしましょう。 そこでplayerの画像を赤く塗りました。 するとplayerの画像もaaaの画像も赤くなります。


Home | 導入編 - はじめてのプログラム - 入力処理をしてみよう

Clone this wiki locally