ゲーム開発講座
Chapter1-2
-読み込んでおいた画像を表示だよの巻-
 
 
-はじめに- 
皆さんこんにちわ。 
でも多分こんばんわ。 
開発講座の時間だぜ。
ハロー。 
皆今日もキバっていこう。
ところでポチ。 
俺は一つ言わなければいけない事があるんだ。
ん? 
なになに? 
ラーメンでもおごってくれるの? 
私はネギチャーシュー麺大盛りがいいな!
いや、そうでなくなんというか。
ん?
お前はもう 
ゲームを作る事ができる!
な、なんだってー!? 
変な嘘をつくな、ビックリするだろ!
嘘じゃねーよ。 
前回やったことちょっと思い出してみろよ。
思い出したが無理だよ。 
理論的に。
そんな事ねーよ。 
じゃあ今日の分のサンプルと素材だ。 
プログラムの説明に使う画像とかあるから前回作った練習用のフォルダに解凍してくれ。 
サンプルDowndoad
ゲームを作ってみた。
サンプルに入ってる「snple01_01.as」っての開いて実行してみてくれ。
おおお、ゲームだ! 
ちゃんと物語になってる!
ソースを見てくれ。 
使っている命令文は 
stop picload mes button pos 
この5つだけだよ。 
それでもゲームになってるだろ?
本当だ、よし早速ゲーム作ってくる! 
早速ミリオンセラー作る!
落ち着け、落ち着いて! 
それにゲームが作れるといってもかなり制限されるし 
実はラベルは無限に作れるわけじゃない。 
ゲームを本格的に作るならもう少し命令文や仕様の勉強をしようぜ。
うん、そうだね。 
仕様の勉強をしようだね。 
全くそうだね。
画像の表示
とりあえず画像の表示いっとくか。
それはもうやっただろうがー! 
この子何いってるのかしらー!
いやいや。 
ゲームを作っていく上でアレだけじゃダメなんだ。 
色々出来ない、さっきのサンプルみたいな事しかできない。
具体的に言ってよ。
そうだなぁ、picloadはハードディスクのデータをメモリーに読み込むんだ。
それって凄い重い。
でもあらかじめメモリーに読み込んでおいたデータを使用したら凄く早い
それだけじゃなくて透明色の指定や画像の半透明合成が出来るんだ。
ゲームを作るにあたって必要不可欠の機能があるのさ。
それは便利っぽいね。
とりあえず表示してみようか。
まずpicloadだけでやってみるとこう。
	picload "haikei2_01.bmp"
	picload "poti2_01.bmp",1,170,0
	stop
picload "failename",p1,p2,p3
知っての通り"fainename"の所にファイル名を入れると画像を表示できるんだけど
他にも設定が出来るんだ。
普通にロードするとウィンドウが画像と同じサイズになるけど、
p1を1にすると現在のウィンドウサイズのままロードできる。
p2,p3に表示する場所を指定できるよ。
なんか私の周りが黒いね。
その黒い部分を取り除いてみようか。
まず画像をメモリーに読み込んでみようか。
難しそうね。
メモリーって0と1を保存している場所でしょ?
それを言ったら全てのデータの元は0と1なんだけど難しく考えなくていいよ。
やり方は簡単なんだから。
そうだなぁ、メモリーに読み込むといったらちょっと解かりにくいかな。
HSPには現在見えているウィンドウと見えていないウィンドウが有るんだ。
見えていないウィンドウの扱いは見えているのと同じ。
画像をそこに表示しておいて、見えているウィンドウにソレをコピーするって方法なんだ。
よし!
何を言っているのかさっぱり解からない!
そうだなぁ、じゃあまず見えるウィンドウを新たに作って説明しようか。
screen p1
コレは新しいウィンドウを作ったり既存のウィンドウのサイズを変えたりできるんだ。
p1にはウィンドウIDを入れるんだ。
ウィンドウIDは0〜31の全32コまで作る事が出来る。
とりあえず作ってみるとこうなる。
	screen 2
	stop
 
あ、新しいウィンドウが表示された。
コレがID2番のウィンドウ。
ちなみに元からあるウィンドウが0番。
ウィンドウを新しく作ると操作先がそのウィンドウになる。
mesとかで文字をID0番に表示させたくてもID2番に表示されてしまうんだ。
そこで操作する画面を指定するのに
gsel p1
という命令文がある。
p1で操作するウィンドウIDを指定するんだ。
つまりこういう事かな?
	screen 2
	mes "二番だぜー"
	gsel 0
	mes "こっちは0番"
	stop
あー、なるほどなー。
そうそう、そんな感じ。
次にID2に表示させた画像のコピー方法。
gcopy p1,p2,p3,p4,p5
p1にはコピー元の画面ID
p2,p3はコピーする画像の位置、
p4,p5はコピーするサイズを入れるんだ。
	screen 2
	picload "poti2_01.bmp"
	gsel 0
	pos 0,0:gcopy 2,0,0,300,480	;全体をコピー
	pos 320,0:gcopy 2,70,70,160,160	;一部分をコピー
	stop
こんな感じだ。
あ、;を書くとその行のそれ以降はプログラムに反映されないので
注釈文とかを描くのに便利だよ。
この画像を一部分切り抜いたのって何かに使えるの?
たとえばアクションやRPGを作る時、キャラのドット絵をずらっと並べるんだけど
その一部分一部分を表示させる時に必要不可欠になるんだ。
1コマにつき1ID使ってもいいけどそれだと31コまでしか作れないからね。
あ、そっか。
なるほど、たしかにそうだね。
んじゃ次に透明色の切り抜きしてみようか。
コレは簡単、gcopyを使う前に、
gmode 2
って入れるだけでいい。
	picload "haikei2_01.bmp"
	screen 2
	picload "poti2_01.bmp"
	gsel 0
	gmode 2		;これで切り抜ける
	pos 0,0:gcopy 2,0,0,300,480
	pos 320,0:gcopy 2,70,70,160,160
	stop
こんな感じだ。
あ、本当だ、切り抜かれて表示されてる!
そっか、背景とキャラを別データにして
切り抜いて表示させないとデータ量が膨大になっちゃうからね。
画像のRBGが0,0,0の部分が切り抜かれるんだ。
その辺りはグラフィックツールで色を作る時に確認するといいよ。
次は画像の半透明合成の方法。
これもgmodeなんだけどgmodeの詳しい説明をさきにしようか。
gmode p1,p2,p3,p4
p1は画像をコピーするモードで0〜6までの設定があるんだ。
0と1は普通のコピーだけど1のほうがちょっと早い。
2はさっきの通りRGB0,0,0を切り抜くコピー。
3と4は半透明コピー、4は半透明と切り抜きコピー。
5は加算合成コピーで6は減算合成コピー。
p2,p3は画像をコピーするサイズでコレを指定するとgcopyのp4,p5を省く事が出来る。
でもあまり使わないからここは空白でいいよ。
p4は半透明合成するときの透明度、数値は0〜256で少ないほど透明になる。
つまりこんな感じかな?
	picload "haikei2_01.bmp"
	screen 2
	picload "poti2_01.bmp"
	gsel 0
	gmode 4,,,100		;半透明設定
	pos 0,0:gcopy 2,0,0,300,480
	pos 320,0:gcopy 2,70,70,160,160
	stop
おお 良い感じにシースルー。
半透明の切り抜きコピーするときちょっと気をつけなきゃいけない事があるんだ。
それは切り抜かれる色がRGB0,0,0とは限らないという事。
でも切り抜かれてるよ?
うん、そう設定されているからね。
colorという命令文が有るんだけど、コレは文字の表示色を設定したり
線を引いたり四角く塗りつぶす命令文を使ったときの色を設定できるんだ。
初期は0,0,0になっているから切抜きコピーできたんだ。
ふーん、透明色を指定できて何か良い事あるの?
そうだなぁ、たとえば絵を描いたのはいいけど、切り抜きたい部分だけ0,0,0にするのは
使っているグラフィックソフトによってすごくやり難い場合がある。
その場合、絵の中で使わないような色、例えば0,255,0みたいな完全グリーンとかを切り抜き
色として指定するというやり方もあるよ。
透明度を256にすると普通の切り抜きコピーになるから、そういう使い方も出来る。
実際やってみようか。
color p1,p2,p3
p1〜p3はRGBと同じで0〜255で色を設定するんだ。
実際やってみよう。
	picload "haikei2_01.bmp"
	screen 2
	picload "poti2_02.bmp"
	gsel 0
	gmode 4,,,200
	pos 0,0:gcopy 2,0,0,300,480
	color 0,255,0
	pos 320,0:gcopy 2,0,0,300,480
	stop
ほらね
なるほど。
半透明はメッセージを表示させるボックスとかで使えそうだね。
・・・ところで画面から画面へのコピーは解かった。
十分理解したけどコレすごい邪魔じゃない?
コピー元の画面
ああそうだな。
解かりやすいように視覚的に表示させてたんだ。
screenをbufferに変えるといいよ。
buffer p1
コレはscreenと同じなんだけど画面は表示されない。
ゲームを作る時画面作成はbufferをメインに使うよ。
今日はここまで。
次回予告
よーし早速ゲーム作るぞー!
ミリオンセラーのをよー!
おいおい、何かわすれてねーか?
なんだい明智くん?
私はいまからゲームを作るから忙しいのだよ。
ラベルの数は制限があるって
言ったデショー!
な、なんだってー!?
つーか、それ!
そこ何とかする方法を教えろよ!
ごめんよ、おっちゃん一週間じゃ色々用意できなかったのよ。
まぁいいよ。
・・・あれ?
前回の次回予告でゲームを作っていくって言ってなかった?
サンプルのは違うよね?
あー、忘れてた。
ガツン
カツオー!
この、ばかもーん!
痛いなぁ。
ダメージ絵を用意していなかったから助かったぜ!
運の良いやつめ。
んで、次回は何すんの?
変数とかループとか条件分岐とかしようか。
ゲームを作るにあたって無くてはならないもんだしね。
そんじゃ、また来週!
一週間じゃまじ辛いって、また来週言うな。
また次回!
今日はここまで。
 
今回のまとめ 
picload "failename",p1,p2,p3 
p1を1にすると現在の画面サイズのまま画像を表示できる。
p2,p3で表示する位置のx,y座標を指定。 
	picload "haikei2_01.bmp"
	picload "poti2_01.bmp",1,170,0
	stop
 
screen p1 
新しい画面を作る。
p1に画面IDを指定。
0番は最初に表示される画面。

buffer p1
非表示の画面を作る。
p1に画面IDを指定。
0番は最初に表示される画面。

	screen 2
	stop
 
gsel p1
操作する画面先を指定

gcopy p1,p2,p3,p4,p5
別画面からの画像をコピーする。
p1にコピー元の画面ID
p2,p3にコピー元の左上の座標指定。
p4,p5に表示するサイズ指定。

	buffer 2
	picload "poti2_01.bmp"
	gsel 0
	pos 0,0:gcopy 2,0,0,300,480	;全体をコピー
	pos 320,0:gcopy 2,70,70,160,160	;一部分をコピー
	stop
 
color p1,p2,p3
表示する文字の色を指定。

gmode p1,p2,p3,p4
gcopyでの画像をコピーする方法を指定できる。
p1にコピーモード
p2,p3にコピーサイズを入れる事によりgcopyのp4,p5を省略できる。
p4で半透明指定した場合の透明度を指定、0〜256で数値が低いほど透明になり256で完全コピー。
コピーモード
0と1は通常コピー、1は速度が早い。
2は透明色切抜きコピー、RGB値が0,0,0が透明になる。
3と4で半透明コピー、4は透明色を切り抜く。
4を指定した時color命令で指定した色が透明色になる。
5で加算合成コピー。
6で減算合成コピー。

	picload "haikei2_01.bmp"
	buffer 2
	picload "poti2_01.bmp"
	gsel 0
	pos 0,0:gmode 2:gcopy 2,0,0,300,480	;透明色切り抜いてをコピー
	pos 320,0:gmode 4,,,100:gcopy 2,0,0,300,480	;半透明コピー
	color 255,0,0:pos 0,0:mes "こりゃ赤い"
	stop
 
もどる