柔軟に対応できる描画関数を作ろうと考えております。
http://www.play21.jp/board/formz.cgi?ac ... &rln=39285
以前、こちらで質問させて頂いたのですが私には実装できず
関数を作ることができなかったので再チャレンジしたいと思っております。
描画関数の拡張 ※前回とは若干仕様が変わっております。
Draw(int x1 ,int y1 ,int ImageHandle ,int x2 ,int y2 ,int x3 ,int y3 ,bool cneterF , ARGB ,int rot ,float ScaleX , float ScaleY);
x1・・・描画座標X
y1・・・描画座標Y
ImageHandle・・・読み込む画像ハンドル
x2・・・読み込んだ画像の切り取り開始位置
y2・・・読み込んだ画像の切り取り開始位置
x3・・・切り取るサイズ 32ならx2~32ドットの切り取り
y3・・・切り取るサイズ
centerF・・・falseなら原点左上、trueなら中心
ARGB・・・ARGB(0xff,0xff,0xff,0xff)などと書くと通常表示
rot・・・原点を中心とした回転角度
ScaleX・・・X軸に対しての拡大率
ScaleY4・・・Y軸に対しての拡大率
上記のような描画関数を作りたいです。
ただし私の現在の実力では作れそうにありません。
そこで皆様のお力を再度お貸し願えないでしょうか?
関数の使い方などは分かるのですが具体的にどの数字を
どのように弄れば良いのか。等がわからないです・・・。
丸投げの様な形になってしまい申し訳ございません。
DXライブラリを使っております。
柔軟に対応できる描画関数
Re:柔軟に対応できる描画関数
正直な感想ですが・・・
これはあまりお勧めできません。
一つの関数に多くの処理を組み込むことは、
可読性も下げますが、余分な処理が増えてきます。
現在のDXライブラリの関数で恐らく表現出来ない事は少ないはずです。
やりたい事を一つ決めてそれを関数化する事を自分は心がけています。
まず、突っ込みどころから
画像を切り取り、その画像ハンドルを操作し、描写→破棄
とするよりは、先に切り取った画像をハンドルとして保持しておき、
それを操作する方が直観的です。
関数ARGBの内容によっては仕様がかなり変わってきそうです。
そもそもどういう関数なのでしょうか?
ARGB(0xff,0xff,0x0,0x0)と書いた場合はどの様な戻り値なのですか?
ARGB(0x0f,0xff,0x0,0x0)では?
恐らく、画像の各ドットの色の操作かと思いますが、
毎ループ各ドットにアクセスしていくには速度がかなり落ちると考えられます。
連続して、このドットにアクセスする場合の関数Drawを一ループ50回も書けば
FPSはたちまち落ちるかと思われます。
まぁ、この辺はトレードオフの関係なんですが。
これはあまりお勧めできません。
一つの関数に多くの処理を組み込むことは、
可読性も下げますが、余分な処理が増えてきます。
現在のDXライブラリの関数で恐らく表現出来ない事は少ないはずです。
やりたい事を一つ決めてそれを関数化する事を自分は心がけています。
まず、突っ込みどころから
画像を切り取り、その画像ハンドルを操作し、描写→破棄
とするよりは、先に切り取った画像をハンドルとして保持しておき、
それを操作する方が直観的です。
関数ARGBの内容によっては仕様がかなり変わってきそうです。
そもそもどういう関数なのでしょうか?
ARGB(0xff,0xff,0x0,0x0)と書いた場合はどの様な戻り値なのですか?
ARGB(0x0f,0xff,0x0,0x0)では?
恐らく、画像の各ドットの色の操作かと思いますが、
毎ループ各ドットにアクセスしていくには速度がかなり落ちると考えられます。
連続して、このドットにアクセスする場合の関数Drawを一ループ50回も書けば
FPSはたちまち落ちるかと思われます。
まぁ、この辺はトレードオフの関係なんですが。
Re:柔軟に対応できる描画関数
kazuoniさんの書く通り、何でも出来る関数の実用性は低いでしょう。
ですが課題として考えるならば、作る価値はあると思います。
他者から出された課題か、自分で設定した課題かは問わず。
当然作るのはあなたです。
> ただし私の現在の実力では作れそうにありません。
多機能の描画関数ですが、その機能を箇条書きにしてください。
全ての機能を満たす関数が最終目的ですが、
まずは1つの機能だけを実装して、バージョン1を完成させましょう。
バージョン1にもう1つの機能を付け加えて、バージョン2を作ります。
これを好きなだけ繰り返して機能を増やせばよいでしょう。
完成品を他人に求めるよりも、まずは自分でできるところまで、
作ってください。
「…という機能までは完成させましたが、…という機能の追加の仕方について、
アドバイスを下さい」という質問の方が良いと思います。
ですが課題として考えるならば、作る価値はあると思います。
他者から出された課題か、自分で設定した課題かは問わず。
当然作るのはあなたです。
> ただし私の現在の実力では作れそうにありません。
多機能の描画関数ですが、その機能を箇条書きにしてください。
全ての機能を満たす関数が最終目的ですが、
まずは1つの機能だけを実装して、バージョン1を完成させましょう。
バージョン1にもう1つの機能を付け加えて、バージョン2を作ります。
これを好きなだけ繰り返して機能を増やせばよいでしょう。
完成品を他人に求めるよりも、まずは自分でできるところまで、
作ってください。
「…という機能までは完成させましたが、…という機能の追加の仕方について、
アドバイスを下さい」という質問の方が良いと思います。
Re:柔軟に対応できる描画関数
x1・・・描画座標X
y1・・・描画座標Y
ImageHandle・・・読み込む画像ハンドル
x2・・・読み込んだ画像の切り取り開始位置
y2・・・読み込んだ画像の切り取り開始位置
x3・・・切り取るサイズ 32ならx2~32ドットの切り取り
y3・・・切り取るサイズ
centerF・・・falseなら原点左上、trueなら中心
ARGB・・・ARGB(0xff,0xff,0xff,0xff)などと書くと通常表示
rot・・・原点を中心とした回転角度
ScaleX・・・X軸に対しての拡大率
ScaleY4・・・Y軸に対しての拡大率
を参考にさせてもらうと
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, centerF );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, ARGB );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, rot );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, ScaleX );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, ScaleY );
と、機能別に作っていけばいいかなと思います
後でバグも追いやすいですし
y1・・・描画座標Y
ImageHandle・・・読み込む画像ハンドル
x2・・・読み込んだ画像の切り取り開始位置
y2・・・読み込んだ画像の切り取り開始位置
x3・・・切り取るサイズ 32ならx2~32ドットの切り取り
y3・・・切り取るサイズ
centerF・・・falseなら原点左上、trueなら中心
ARGB・・・ARGB(0xff,0xff,0xff,0xff)などと書くと通常表示
rot・・・原点を中心とした回転角度
ScaleX・・・X軸に対しての拡大率
ScaleY4・・・Y軸に対しての拡大率
を参考にさせてもらうと
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, centerF );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, ARGB );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, rot );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, ScaleX );
Draw( x1, y1, ImageHandle, x2, y2, x3, y3, ScaleY );
と、機能別に作っていけばいいかなと思います
後でバグも追いやすいですし