HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0506
SADOUShmmのDGde3解決


SADOUS

リンク

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が実行されるまで更新されない。

浅はかな知識でお恥ずかしい限り...



この記事に返信する


SADOUS

リンク

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の使い方にさえ注意すれば、あとはそれ程難しくはないと思います。



SADOUS

リンク

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,濃さ
これ重要ですね



ONION software Copyright 1997-2023(c) All rights reserved.