|
|
2014/5/6(Tue) 11:30:38|NO.61893
#include "hmm.as"
DGINIT
DGSCREEN 640,480,1
DGBUFFER 1,640,480
dggsel 1
dgpos 0,0
dgloadfname "image/map.bmp"
dggsel 0:dgcolor 0,0,0,255:dgclear
dggsel 1:dgcolor 0,0,0,255:dgclear
//dgTexture 1//スタック積描写で指定
dgblendmode 0
/* 0 = 透過無し描画
1 = 半透明合成( 透過有りRGB(0, 0, 0)を透過 )
2 = 加算合成*/
dgrect 0,0,640,480
dgpos 0,0
dggcopy 1,0
dgredraw
screen 10,640,480
buffer 11
picload "image/map.bmp"
gsel 10
pos 0,0
gcopy 11,0,0,640,480
上記のソースで標準命令の方では画像が表示できました。
Direct Graphicsを使うのがはじめてなので流れがいまいちよくわかりません。
サンプルを見よう見まねで組み立てたものなので問題だらけだと思うので
ご指摘お願いします。
自分は以下のように解釈しています。
・バッファへの描写は
標準命令ではredraw 0を指定している場合1を指定し直さないと反映されないが、
dggcopyやDGDRAWPRIMITIVEで即時反映される。
・メインのスクリーンへの描写は
標準命令ではredraw 0を指定しない限り描写系の命令で即時反映されるが、
無条件にdgredrawが実行されるまで更新されない。
浅はかな知識でお恥ずかしい限り...
|
|
2014/5/6(Tue) 11:34:37|NO.61894
タイトルを入力ミスしてしまいました。
「hmmのDGでのコピーの仕方がわからない/画像が読み込めない」
|
|
2014/5/6(Tue) 18:25:12|NO.61916
最低限必要そうな命令を使うとこんな感じでしょうか。
#include "hmm.as"
DGINIT
DGSCREEN 640, 480, 1, 16 ; スクリーン0の初期化
;DGCREATEPRIMITIVE 512 ; DGADDPRIMITIVEのスタック数を指定
DGRENEWALTIMING 60 ; 1秒間に指定した回数画面を更新
DGBUFFER 1, 512, 512 ; DGバッファ1を作成
DGLOADFNAME dir_tv + "\\hsptv_img.bmp", 1 ; DGバッファ1に画像読み込み
onexit *exit ; 自動で開放処理はされるみたいだが、一応保険で
#const CH_MAX 64 ; キャラクター数
dim ch_srcx, CH_MAX ; キャラクターコピー元X座標
dim ch_srcy, CH_MAX ; キャラクターコピー元Y座標
dim ch_x, CH_MAX ; キャラクターX座標
dim ch_y, CH_MAX ; キャラクターY座標
dim ch_movx, CH_MAX ; キャラクターX移動量
dim ch_movy, CH_MAX ; キャラクターY移動量
dim ch_r, CH_MAX ; キャラクター表示角度
dim ch_blend, CH_MAX ; キャラクターブレンド率
randomize
repeat CH_MAX
ch_srcx(cnt) = rnd(8) * 64
ch_srcy(cnt) = rnd(6) * 64 + 128
ch_x(cnt) = rnd(640) - 64
ch_y(cnt) = rnd(480) - 64
ch_movx(cnt) = rnd(9) - 4
ch_movy(cnt) = rnd(9) - 4
ch_r(cnt) = rnd(256)
ch_blend(cnt) = rnd(200) + 56
loop
DGFONT MSGOTHIC, 32 ; DGDRAWTEXT用のフォントの指定
*main
DGGSEL 0 ; コピー先ウィンドウを指定
DGCOLOR 255,255,155 ; 背景色指定
DGCLEAR ; 指定した色で背景を塗りつぶし
repeat CH_MAX
DGRECT ch_srcx(cnt), ch_srcy(cnt), 64, 64 ; コピーする画像の位置とサイズを指定
DGSCALEANDANGLE 256, 256, ch_r(cnt) ; コピーする画像の表示率と角度を指定
DGBLENDMODE 1 ; コピーモードを指定(0を指定しても黒(RGB(0,0,0))は透過されるみたい?)
DGCOLOR 255, 255, 255, ch_blend(cnt) ; コピーする画像の色成分とブレンド率を指定
DGPOS ch_x(cnt), ch_y(cnt) ; 画像をコピーする座標を指定
ch_x(cnt) = limit(ch_x(cnt) + ch_movx(cnt), 0, 576) ; キャラクター移動計算
ch_y(cnt) = limit(ch_y(cnt) + ch_movy(cnt), 0, 416)
if (ch_x(cnt) <= 0) or (ch_x(cnt) >= 576) : ch_movx(cnt) * -1 ; キャラクターが画面端に来たら移動方向反転
if (ch_y(cnt) <= 0) or (ch_y(cnt) >= 416) : ch_movy(cnt) * -1
DGADDPRIMITIVE ; コピーパラメーターをスタック(DGGCOPYでも可)
loop
DGTEXTURE 1 ; 画像コピー元のスクリーンIDを指定(最後に指定した一つしか反映されないので注意)
DGDRAWPRIMITIVE ; DGADDPRIMITIVEでスタックしたパラメーターで画像を一括コピー
HMMGETFPS fps ; FPSの取得
DGCOLOR 255, 0, 0, 255 ; 文字色の指定
DGPOS 0, 0 : DGDRAWTEXT "" + FPS + "fps", 120, 120
DGREDRAW ; スクリーン0に結果を反映
await ; これがないと暴走します
goto *main
*exit
DGEND
end
DGCOLORの使い方にさえ注意すれば、あとはそれ程難しくはないと思います。

| |
|
2014/5/6(Tue) 19:10:33|NO.61917
#include "hmm.as"
DGINIT
onexit*exit
;---初期る
#const MODE_WINDOW 1
#const MODE_FULLSC 0
DGSCREEN 640,480,MODE_WINDOW
;DGRENEWALTIMING 60
DGBUFFER 1,640,480
dgloadfname dir_tv + "\\hsptv_img.bmp",1;"image\map.bmp"
;---描写
DGGSEL 0
dgcolor 0,255,0,255:dgclear
dgrect 0,0,640,480
dgblendmode 1
/* 0 = 透過無し描画
1 = 半透明合成( 透過有りRGB(0, 0, 0)を透過 )
2 = 加算合成*/
dgcolor 255,255,255,255
dgpos 0,0
dggcopy 1,0
dgredraw
stop
*exit
DGEND
end
上記ソースにて無事解決しました!
ありさんからいただいたソースで分かりましたが、
ブレンドモードの指定直後にdgcolorでコピーする色・濃さを設定する必要が
あったのですね!
dgcolorでブレンド率を指定するところは何となく気づいてましたが、
コピーする色まで指定しなければならなかったとは...
dgblendmode 1 or 2
dgcolor 255,255,255,濃さ
これ重要ですね
|
|