[過去ログ] Delphiゲームプログラミング相談室 (976レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
711(2): 名前は開発中のものです。 [] 2006/01/03(火) 20:00:41 ID:yxS2cKCH(1) AAS
Delphi6 とunDelphi XでSTGをつくっています。
敵を倒したときに
レンズフレアっぽい爆発やパーティクルを散らしたり
したいんですが、どういう方法をとればいいでしょうか。
TDirectDrawSurfaceって
矩形描画関係のメソッドはいろいろあるんですが
(DrawAdd,DrawAlpha,FillRectAdd,FillRectAlphaなど)
楕円や線を描画するメソッドは用意されていないようです。
Canvasにはellipseやmoveto&linetoがありますが、
半透明合成や加算合成はできませんし。
何かよい方法がありましたら教えていただけるとうれしいです。
713(1): 名前は開発中のものです。 [sage] 2006/01/03(火) 22:04:25 ID:/V5oIo2f(1) AAS
>>711
DirectDrawを使って半透明や加算合成をやりたい時は、
サーフェスに自前で描画するか、
CanvasのPen.Modeを使った擬似的な合成をやるしかない。
サーフェスに描画するときは、システムメモリにサーフェスをおかないと
致命的なほど速度が遅くなるし、システムメモリにおいてもまともな速度を出すには、
かなりのチューニングが必要になる。
Canvasを使う場合は、思ったとおりの画像がでない。
また、かなり遅くなるので注意。
よって、DirectDrawはやめてDirect3D使うのが一番簡単だったりする。
714: 711 [sage] 2006/01/04(水) 01:11:02 ID:Z7OuzLUo(1) AAS
回答どうもです
Inside DelphiXのサンプルを弄って試行錯誤しているような段階なんで
覚束ないんですが
>>712712(1): な [sage] 2006/01/03(火) 21:42:35 ID:E1OTiKsy(1) AAS
DelphiXのチュートリアルにも書いてありますが、サーフェイスの画素データに
直接アクセスして描画してみたらどうでしょう。
外してたらごめん。
procedureTForm1.Button1Click(Sender:TObject);
var
ddsd:DDSURFACEDESC;
function DDScanLine(y:Integer):Pointer;
begin
{TBitmap.ScanLine と同じ働きをします}
Result :=Pointer(Integer(ddsd.lpSurface)+y*ddsd.lPitch);
end;
var
y:Integer;
begin
ddsd.dwSize :=SizeOf(ddsd);
ifDXDraw1.Surface.Lock(ddsd)then
begin
{ddsd.dwWidth サーフェースの幅}
{ddsd.dwheigh サーフェースの高さ}
{ddsd.lpSurface ピクセルデータ(0,0)へのポインタ}
{ddsd.lPitch 下の行のスキャンラインへのオフセット}
{Abs(ddsd.lPitch)1ラインで使用しているバイト数}
try
for y:=0 to ddsd.dwHeight-1 do
FillChar(DDScanLine(y)^,Abs(ddsd.lPitch),Y);
finally
DXDraw1.Surface.UnLock;{これが必須}
end;
end;
あらかじめ円の画像を用意しておく
↓
DXDraw1.SurfaceをLock
↓
DDScanLineで読み出して円の画像と合成
↓
Unlock
というやり方でいいんでしょうか
>>713
なかなか厳しいんですね
Quadruple Dのサンプルをみて、こういうのがDelphi Xで出来たらいいな、と
思ったもので
Extreme Shooters (beta4.53)
外部リンク[html]:www-fu.magma.ne.jp
Direct3Dは残念ながら未だ手付かずですが
後学のため、大まかなやり方でも教授いただければ幸いです
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.038s