Draw

「Draw」の編集履歴(バックアップ)一覧に戻る

Draw - (2013/07/28 (日) 00:49:52) のソース

*標準ライブラリ - Draw
**説明
>Drawは、文字や画像や3Dデータといったものを動かしたり、変形して表示させたりすることが出来るメソッドを多数持っています。&br()ステージ全体に効果を与えるものと、クラスからインスタンスを生成してごにょごにょするものと2種類あるので、注意しよう。

----
#contents(fromhere=true)
----

*&aname(Draw所有メソッド)所有メソッド
**LoadTex(path:[]char) : @CTex
***&aname(LoadTex説明)説明
>指定したファイルパスに存在するテクスチャ(俗にいう画像ファイル)をロードします。&br()この処理はそこそこ重たいので極力呼び出さないようにしましょう(基本は初回のみで)&br()ちなみに解放処理はオートでやってくれます。メモリ解放忘れで闇だった旧GBerryとは違うのだ(しろめ)
***&aname(LoadTex引数)引数
-path:[]char
--ファイルパスを指定します
--dbgresディレクトリからの相対パスにも対応しています。
--指定することが出来るテクスチャデータは、KuinTexを使用して.kntexというファイルフォーマットに変換したもののみが使用出来ます。
***&aname(LoadTex戻り値)戻り値
-Draw@CTex
--Draw@CTex型のクラスインスタンスが返ります。
--このLoadTexで得たクラスインスタンスを利用して、表示とか変形とかの処理を行います。
***&aname(LoadTexサンプルコード)サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	{Draw@CTexの項で嫌ほど使うので省略します}
end func}}

----

**テンプレメソッド(ひきすー:ひきすうかたー) : もどりちー
***&aname(テンプレ説明)説明
>テンプレメソッドの説明をここにー
***&aname(テンプレ引数)引数
-ひきすー:ひきすうかたー
--ひきすーのせつめー
***&aname(テンプレ戻り値)戻り値
-もどりちかたー
--もどりちせつめいー
***&aname(テンプレサンプルコード)サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	{素敵なソースコードをここにー}
end func}}

----

*&aname(CTex)CTex
**&aname(CTex説明)説明
>Kuinでテクスチャ(画像)を扱う為に使うクラスです。&br()基本的には[#LoadTex]メソッドの戻り値でインスタンスを得るため、このクラスを自分でインスタンス生成することはないです[要出典]&br()ちなみに、このクラスのコンストラクタを呼び出すと、16#00010006の実行時エラーを吐きます。
**&aname(Ctex補足)補足
>なお、今回の説明で、何ぶん画像がないと説明しづらい部分があるので、特別にくいなちゃんを用意しました(256x256)。&br()このくいなちゃんを「kuina.png」で保存し、KuinTexで「kuina.png.kntex」となったものを「kuina.kntex」にリネームし、以降のサンプルコード中に使用するものとする。
#image(http://cdn57.atwikiimg.com/kuin/?cmd=upload&act=open&page=Draw&file=kuina.png)
**&aname(CTex所有メソッド)所有メソッド
***&aname(CTexDraw)Draw(sx:float,sy:float,sw:float,sh:float,dx:float,dy:float,r:float,g:float,b:float,a:float) : なし
-説明
>このインスタンスに指定されている.kntexの画像データを、指定した座標や色情報を元にKuin上に表示します。&br()このメソッドはDrawScaleのラッパーです。つまりは、拡大率100%(拡大縮小無し)の、DrawScaleを内部で呼び出してるのと全く同じです。
-引数
--sx : float
---略称はおそらく「&bold(){ソースx座標}」の意味だと思います
---画像ファイルの中の、表示したい左上の座標のx座標を指定します。
---いつもは0.0だと思いますが、例えばbullet.pngに色んな弾をまとめて1枚の画像としてkntexに変換した時なんかに、左上の座標を切り替えるだけで、1つのインスタンスから何種類もの弾丸を取り出すことが出来ます。こうすることで扱いやすさ的にも処理速度的にもプラスに出来ます。
--sy : float
---略称はおそらく「&bold(){ソースy座標}」の意味だと思います
---sxのy座標バージョンです。
---正直浮動小数点である理由はよく分かりません。整数のピクセル値以外を左上の座標に指定するメリットがある場面が想像出来ませんし、○○.0って打つ作業が面倒くさいのでint型にして欲しいです(消される)
--sw : float
---略称はおそらく「&bold(){ソースwidth(横幅)}」の意味だと思います
---画像ファイルの中の、表示したい横幅pxを指定します
---解釈を変えれば、(右下のx座標 - 左上のx座標)の座標を指定するとも取れますね。
--sh : float
---略称はおそらく「&bold(){ソースheight(縦幅)}」の意味だと思います
---画像ファイルの中の、表示したい縦幅pxを指定します
---解釈を変えれば、(右下のy座標 - 左上のy座標)の座標を指定するとも取れますね。
---どうでもいいけどsw,shに関してもint型に(ry
--dx : float
---略称はおそらく「&bold(){ディスプレイx座標}」の意味だと思います
---Kuin上の表示したいx座標を指定します。
---0.0と指定したら左端に画像が表示されるし、100.0と指定したら左側から100px右に移動した位置に表示されます。
--dy : float
---略称はおそらく「&bold(){ディスプレイy座標}」の意味だと思います
---Kuin上の表示したいy座標を指定します。
---0.0と指定したら上端に画像が表示されるし、100.0と指定したら上側から100px下に移動した位置に表示されます。
--r : float
---画像の&color(red){赤っぽさ}成分を指定します。
---基本的には1.0で。&color(red){赤っぽさ}を&color(blue){弱めたい}場合には&color(blue){0.0に近づける}と&color(red){赤っぽく}なくなります。
--g : float
---画像の&color(green){緑っぽさ}成分を指定します。
---基本的には1.0で。&color(green){緑っぽさ}を&color(blue){弱めたい}場合には&color(blue){0.0に近づける}と&color(green){緑っぽく}なくなります。
--b : float
---画像の&color(blue){青っぽさ}成分を指定します。
---基本的には1.0で。&color(blue){青っぽさ}を&color(blue){弱めたい}場合には&color(blue){0.0に近づける}と&color(blue){青っぽく}なくなります。
--a : float
---画像の&bold(){不透明度}成分を指定します。
---基本的には1.0で。&bold(){不透明度}を&color(blue){弱めたい}場合には&color(blue){0.0に近づける}と[[\アッカリーン/>http://www.google.co.jp/search?q=%EF%BC%BC%EF%BD%B1%EF%BD%AF%EF%BD%B6%EF%BE%98%EF%BD%B0%EF%BE%9D%EF%BC%8F]]します
--サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var kuinaImage : Draw@CTex :: Draw@LoadTex("kuina.kntex") {kntexファイルをLoadしてくる}
	while(true)
		do Kuin@Act()
		
		{
			kuina.kntexの画像ファイルから、
			座標(0,0)の位置から横幅256px、縦幅256pxを取り出し
			Main_dbg.exeウィンドウの左上から(100,100)の位置に
			RGBAの全てを100%出力で、画像を表示させる
		}
		do kuinaImage.Draw(0.0,0.0,256.0,256.0,100.0,100.0,1.0,1.0,1.0,1.0)
	end while
end func}}
----
***&aname(CTexDrawScale)DrawScale(sx:float,sy:float,sw:float,sh:float,dx:float,dy:float,dw:float,dh: float,r:float,g:float,b:float,a:float) : なし
-説明
>画像の表示だけなら[[Draw>#CTexDraw]]で行えますが、画像の拡大縮小を考慮した上で表示したい場合は、こちらのDrawScaleを使用します&br()拡大縮小ができるってだけで、基本的には[[Draw>#CTexDraw]]と一緒なので、引数も[[Draw>#CTexDraw]]と異なる部分だけを説明します
-引数
--sx : float
--sy : float
--sw : float
--sh : float
--dx : float
--dy : float
--dw : float
---略称はおそらく「&bold(){ディスプレイwidth(横幅)}」の意味だと思います
---Kuin上の表示したい横幅を指定します。
---swと同じにしたら等倍で表示されるし、swの2倍の値を入れたら2倍横長になります
--dh : float
---略称はおそらく「&bold(){ディスプレイheight(縦幅)}」の意味だと思います
---Kuin上の表示したい縦幅を指定します。
---shと同じにしたら等倍で表示されるし、shの2倍の値を入れたら2倍横長になります
--r : float
--g : float
--b : float
--a : float
--サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var kuinaImage : Draw@CTex :: Draw@LoadTex("kuina.kntex") {kntexファイルをLoadしてくる}
	
	const FPS  : int :: 30 {Ver0.031では30fpsなので30という定数を入れる}
	var scale  : float
	var sin    : float
	var cos    : float
	var dy     : float
	var width  : float
	var height : float
	
	while(true)
		do Kuin@Act()
 		
		{
			kuina.kntexの画像ファイルから、
			座標(0,0)の位置から横幅256px、縦幅256pxを取り出し
			Main_dbg.exeウィンドウの左上から(200,100)の位置で、横幅128px、縦幅128pxを基準の大きさにして
			横幅の値を1秒周期で-128~128に変化させ、あたかもdx:100pxを中心に横方向回転してるかの如く表現し
			縦幅の値を1秒周期で96~160に変化して、パースを付けて立体感を表現する
			その際に、y座標にバイアスをかけて位置に違和感がないようにする
			RGBAの全てを100%出力で、画像を表示させる
		}
		
		do scale  :: ((Kuin@Cnt()-1)%FPS*12) $ float {FPS(30)で割った余りを12倍してfloatにキャストすると0≦scale<360の値になる}
		do scale  :* Lib@Pi / 180.0       {それをπ/180倍することで、ラジアンの値に変換する}
		do sin    :: Lib@Sin(scale)       {それをsinの値にすると、 0⇒+1⇒ 0⇒-1⇒ 0の順番で値が変化していく}
		do cos    :: Lib@Cos(scale)       {それをcosの値にすると、+1⇒ 0⇒-1⇒ 0⇒+1の順番で値が変化していく}
		do width  :: cos * 128.0          {cosを128倍すると、+128⇒0⇒-128⇒0⇒+128の順番で値が変化していく}
		do height :: 128.0 + (sin * 32.0) {sinを32倍して128に足すと、128⇒160⇒128⇒96⇒128の順番で値が変化していく}
		do dy :: -((sin * 32.0)/2.0)      {heightの増分の半分の大きさの符号反転の値だけy方向に移動させることで、違和感を無くす}
		do kuinaImage.DrawScale(0.0,0.0,256.0,256.0,200.0,100.0+dy,width,height,1.0,1.0,1.0,1.0)
	end while
end func}}
----
***&aname(CTexDrawRot)DrawRot(sx:float,sy:float,sw:float,sh:float,dx:float,dy:float,dw:float,dh: float,cx:float,cy:float,angle:float,r:float,g:float,b:float,a:float) : なし
-説明
>画像を回転させる必要もある場合にはこのDrawRotを使用します。&br()これも毎度のことながら、[[DrawScale>#CTexDrawScale]]とほぼ同じなので、引数の説明は適宜省略していきます。
-引数
--sx : float
--sy : float
--sw : float
--sh : float
--dx : float
--dy : float
--dw : float
--dh : float
--cx : float
---略称はおそらく「&bold(){サークル(円形)x座標}」の意味だと思います。もしかしたら「センター(中心)x座標」かもしれない。
---回転中心となるx座標を指定します。これはdxからの相対値です。
---どういう回転をさせるかにもよるけど、大抵はdwの半分の値か、0.0だと思いますね。
--cy : float
---略称はおそらく「&bold(){サークル(円形)y座標}」の意味だと思います。もしかしたら「センター(中心)y座標」かもしれない。
---回転中心となるy座標を指定します。これはdyからの相対値です。
---どういう回転をさせるかにもよるけど、大抵はdhの半分の値か、0.0だと思いますね。
--angle : float
---回転する角度を指定します。
---単位はラジアンです。degreeだと思ってドヤ顔で360.0とか打たないでください死んでしまいます
--r : float
--g : float
--b : float
--a : float
--サンプルコード(Ver0.031)
#highlight(linenumber){{func Main()
	var kuinaImage : Draw@CTex :: Draw@LoadTex("kuina.kntex") {kntexファイルをLoadしてくる}
	
	const FPS : int :: 30 {Ver0.031では30fpsなので30という定数を入れる}
	var angle : float
	
	while(true)
		do Kuin@Act()
 		
		{
			kuina.kntexの画像ファイルから、
			座標(0,0)の位置から横幅256px、縦幅256pxを取り出し
			Main_dbg.exeウィンドウの左上から(100,100)の位置で、横幅128px、縦幅128pxに縮小して
			また、回転中心を(64.0,64.0)として、1秒間に1回転するスピードでぐるぐる回す
			RGBAの全てを100%出力で、画像を表示させる
		}
		
		do angle :: ((Kuin@Cnt()-1)%FPS*12) $ float {FPS(30)で割った余りを12倍してfloatにキャストすると0.0≦angle<360.0の値になる}
		do angle :* Lib@Pi / 180.0 {それをπ/180.0倍することで、ラジアンの値に変換する}
		do kuinaImage.DrawRot(0.0,0.0,256.0,256.0,100.0,100.0,128.0,128.0,64.0,64.0,angle,1.0,1.0,1.0,1.0)
	end while
end func}}

----

*CFont

----

*CObj