[過去ログ] Delphiゲームプログラミング相談室 (976レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
713
(1): 名前は開発中のものです。 [sage] 2006/01/03(火) 22:04:25 ID:/V5oIo2f(1) AAS
>>711
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がありますが、
半透明合成や加算合成はできませんし。

何かよい方法がありましたら教えていただけるとうれしいです。
DirectDrawを使って半透明や加算合成をやりたい時は、
サーフェスに自前で描画するか、
CanvasのPen.Modeを使った擬似的な合成をやるしかない。

サーフェスに描画するときは、システムメモリにサーフェスをおかないと
致命的なほど速度が遅くなるし、システムメモリにおいてもまともな速度を出すには、
かなりのチューニングが必要になる。

Canvasを使う場合は、思ったとおりの画像がでない。
また、かなり遅くなるので注意。

よって、DirectDrawはやめてDirect3D使うのが一番簡単だったりする。
714: 711 [sage] 2006/01/04(水) 01:11:02 ID:Z7OuzLUo(1) AAS
回答どうもです
Inside DelphiXのサンプルを弄って試行錯誤しているような段階なんで
覚束ないんですが

>>712
712(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.042s