[過去ログ] Delphiゲームプログラミング相談室 (976レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
287: 名前は開発中のものです。 [sage] 03/05/20 13:06 ID:mVYsvlCM(2/2) AAS
 >>286286(2): 名前は開発中のものです。 [sage] 03/05/20 02:17 ID:zL9Q18du(1) AAS
 >>285 
 sleep() でウェイトをかましているからでは。 
 WINのタスクを独り占めして文字通り眠ったようになりますから。 
  
 タイマーとカウンタを使うのはどうでしょう? 
 TForm1.FormCreate の所で cnt を 1 に設定しておいてから、 
  
 procedure TForm1.Timer1Timer(Sender: TObject); 
 begin 
 image1.Picture.LoadFromFile('C:\00' + IntToStr(cnt) + '.bmp'); 
 BitBlt(image2.Canvas.Handle,0,0,37,75,image1.Canvas.Handle,0,0,SRCCOPY); 
 image2.Repaint; 
 Inc(cnt); 
 if cnt>6 then cnt:=1; 
 end; 
  
 というのは如何でしょう? 
 あと、 bmp ファイルは最初にまとめて ImageList へ読み込ませては?  
見事に軽くなりました(´ー`) ありがとうございますた。 
 ImageListコンポーネントは使ったことがないのですが、 
 ちょっと弄ってみることにします。 
288(5): 名前は開発中のものです。 [sage] 03/05/21 02:17 ID:yuA7Jdfb(1) AAS
 質問です。 
 ■■■ 
 ■□■ 
 ■■■ 
 (元絵:□が残したい部分・■が黒塗りつぶし) 
 □□□ 
 □■□ 
 □□□ 
 (マスク:□が白塗りつぶし・■が残したい部分の黒塗りつぶし) 
 を、OR→AND演算で表示すれば半透明化出来ると思うのですが、 
 ↑のマスク画像無しで、半透明化するにはどうすればいいのでしょうか? 
  
 # ADVなエロゲーを再現しようと思ってるのですが、画像を抜き出してみたところ、 
 # 手元のゲーム(VisualArts系やDOのゲーム等)では、各キャラクターの立ち絵に 
 # マスク用画像が用意されてなく、黒背景に立ち絵が描いてある画像しか 
 # 入ってませんでした。これらは、何か別の画像と論理演算を行って 
 # 半透明化させてるんでしょうか? 
289(2): 名前は開発中のものです。 [sage] 03/05/21 02:49 ID:8zKfauhG(1) AAS
 マスク画像は実行時に作成しているか、 
 1ピクセルずつ合成してるんじゃないの?  
  
 SRCANDやSRCPAINT以外にもたくさんの合成方法があるけど、 
 1回のBitBltで透過させる事は不可能だと思う。 
290(3): 名前は開発中のものです。 [sage] 03/05/21 03:36 ID:pDtj6lgc(1) AAS
 >>288 
 TBitmap の ScanLine を使って、>>289 さんの仰るとおり 1 pixel ごとに 
 処理するヨロシ。 
291: 名前は開発中のものです。 [sage] 03/05/23 14:57 ID:gD+lmxCD(1) AAS
 外部リンク[htm]:www.geocities.jp 
292(1): 名前は開発中のものです。 [sage] 03/05/24 02:30 ID:LSDvOFkW(1) AAS
 291は何なの!? 荒らしいらい? 
293(1): 名前は開発中のものです。 [sage] 03/05/24 03:57 ID:o6GsTVdQ(1) AAS
 >>288 
 TImageのプロパティで出来るじゃん 
294(1): 名前は開発中のものです。 [sage] 03/05/24 11:34 ID:FLU40T1i(1) AAS
 >>288 
 Doは知らんがVisualArts系にはマスク部分ある。確か立ち絵のファイルといっしょになってる。 
 画像抜くのに使ってるソフトによってはマスク部分が無視される。 
 というかあれのマスク部分考慮してる抜き出しソフト見たことない。あんまり需要無いしな。
295(2): 288 [sage] 03/05/25 03:35 ID:OUd92QaS(1) AAS
 >>289 
 >>290 
 外部リンク[html]:www.sm.rim.or.jp 
 とりあえず↑のサイトを参考に(というかほぼコピペ)作ってみますた。 
  
 外部リンク[zip]:www.geocities.co.jp 
  
 1ピクセル単位で色を取得、黒だったら白に、それ以外の色だったら 
 黒にするという処理を行いました。ただ、問題点が2つほど… 
  
 ・For文で回してる処理が非常に遅い(scanlineのせい?) 
 ・残したいキャラに含まれている黒色までマスク化してしまう(目の黒など) 
  
 この2つが非常に悩ませてくれます… 上はともかく、下は 
 見た目に非常に影響するので(;´д⊂ やはり、透明化したくない 
 部分の黒色だけ、塗りつぶさないような条件処理でしか 
 解決策はないんでしょうか? 
  
 >>293 
 Transparentプロパティを使えば出来ますが、プログラムで再現したかったのでつ… 
  
 >>294 
 とりあえず一番簡単な方法である、Susieにプラグイン入れて 
 画像抜き出しやってるんですが、マスク画像は入ってるのですね。 
 じゃぁDOの方も、立ち絵ファイルと一緒になってたりするのかしら… 
296(5): 290 [sage] 03/05/25 17:23 ID:ll42N4KR(1/3) AAS
 >>295 
 ソース拝見いたしました。 
 > ・For文で回してる処理が非常に遅い(scanlineのせい?) 
 マスクを作るプロシージャにて、パレットコードを String に変換している 
 為と思われます。 
  
 procedure TForm1.make_mask(sBmp:TBitmap); 
 var 
     i,j, x : Integer; 
     p : PDWORD; 
     mp : PBYTEArray; 
 begin 
   for i:=0 to sBmp.Height-1 do begin 
     p := sBmp.ScanLine[i]; // ビットマップ座標(0,i)のポインタ 
     mp := mask.ScanLine[i]; 
     x :=0; 
     for j:=0 to sBmp.Width-1 do begin 
       if p^ = $00000000 then //if str_mask = '000' then 
       begin 
         mp[x]:=$ff;  mp[x+1]:=$ff;  mp[x+2]:=$ff; // B=255 , G=255 , R=255 
       end else begin 
         mp[x]:=$00;  mp[x+1]:=$00;  mp[x+2]:=$00;  // B=0 , G=0 , R=0 
       end; 
       Inc(p);  Inc(x,3); 
     end; 
   end; 
 end; 
 ……と、いうのは如何でしょう?( PDWORD よりも PDCHARArray の方が 
 わかりやすいでしょうか)  
297: 290@続き [sage] 03/05/25 17:27 ID:ll42N4KR(2/3) AAS
 >>296 
 自己レス 
  PDCHARArray って何やねん…。 PBYTEArray です。 
  
 >>295 
 > ・残したいキャラに含まれている黒色までマスク化してしまう(目の黒など) 
  
 ペイントソフトを使って、マスク用のカラー(例 $ffff00 などの使わない色)で 
 抜きたい所を塗るのはどうですか? 
 if p^ = $00000000 then の所は変更せねばなりませんが。 
298(1): 290 [sage] 03/05/25 17:41 ID:ll42N4KR(3/3) AAS
 連続投稿すみません。 
 キャラ絵を見てみましたが、瞳の中や影にあたる部分に背景を透けさせる色 
  RGB(0,0,0) で塗られている部分があります。 
 この絵からマスクをつくると、目の部分が抜けてしまいますね。 
299: 名前は開発中のものです。 [sage] 03/05/26 17:01 ID:rwyNVs4A(1) AAS
 >>285285(2): 名前は開発中のものです。 [sage] 03/05/20 01:21 ID:mVYsvlCM(1/2) AAS
 Bitbltを使ってアニメーションをさせてるんですが、開始すると 
 アニメーションは割と綺麗に動きますが、実行させてるFormが 
 非常に重たくなります。Formを移動させようとしようものなら、 
 かなりガクガクに動くように…(開発環境マシンはP42.53GHzです) 
 何方か対策をご教授願えれば幸いです。 
  
 // TimerのIntervalは500に設定してます。 
 procedure TForm1.Timer1Timer(Sender: TObject); 
 begin 
 image1.Picture.LoadFromFile('C:\001.bmp'); 
 BitBlt(image2.Canvas.Handle,0,0,37,75,image1.Canvas.Handle,0,0,SRCCOPY); 
 image2.Repaint; 
 sleep (100); 
 image1.Picture.LoadFromFile('C:\002.bmp'); 
 BitBlt(image2.Canvas.Handle,0,0,37,75,image1.Canvas.Handle,0,0,SRCCOPY); 
 image2.Repaint; 
 sleep (100); 
 . 
 . 
 . 
 image1.Picture.LoadFromFile('C:\006.bmp'); 
 BitBlt(image2.Canvas.Handle,0,0,37,75,image1.Canvas.Handle,0,0,SRCCOPY); 
 image2.Repaint; 
 end;  
もう直したかもしれないけれど、LoadFromFile は、描画ごとに毎回やるには 
 むちゃくちゃ遅いです。>>286のようにTImageかTImageListに、あらかじめ格納しておくに一票。 
  
 >>292 
 TAlphaBitmapっていうグラフィックエンジンの紹介かと 
  
 >>298 
 普通はマスクの色は、使っていない色を使います。 
 でも、フルカラーとかハイカラーで書いていると面倒だよね。 
300(1): 名前は開発中のものです。 [sage] 03/05/29 18:32 ID:N4i9Vcx6(1) AAS
 遅レスですまんが 
  
 0 1 2 3 4  
  1 2 3 4 5 
 2 2 3 4 5  
  3 3 4 5 6 
  
 移動条件を全マス上下左右+左上+右下に統一しておいて 
 こうずらしたほうが良くない? 
  
 0 1 2 3 4  
   1 2 3 4 5  
   2 2 3 4 5  
     3 3 4 5 6
301(1): 名前は開発中のものです。 [sage] 03/05/29 23:33 ID:mpTwdvzD(1/2) AAS
 >>300 
  5 4 3 3 3 3 4 5 6 
 5 4 3 2 2 2 3 4 5 
  4 3 2 1 1 2 3 4 5 
 4 3 2 1 0 1 2 3 4 
  4 3 2 1 1 2 3 4 5 
 5 4 3 2 2 2 3 4 5 
  5 4 3 3 3 3 4 5 6 
  
 が、 
  
     5 4 3 3 3 3 4 5 6 
   5 4 3 2 2 2 3 4 5 
   4 3 2 1 1 2 3 4 5 
 4 3 2 1 0 1 2 3 4 
   4 3 2 1 1 2 3 4 5 
   5 4 3 2 2 2 3 4 5 
     5 4 3 3 3 3 4 5 6 
  
 になるということですか。 
 うーん、 >>282282(2): 名前は開発中のものです。 [sage] 03/05/18 23:17 ID:Vqiijavw(1) AAS
 >>280 
 今度は(1,0)-(0,1)で2になります。 
  
 x0=1; 
 y0=0; 
 x1=0; 
 y1=1; 
 xlen = Abs(0-1) = 1; 
 ylen = Abs(1-0) = 1; 
  
 1 <= (1 div 2) が成立しないので、 
 hexlen := 1 + 1 - (1 div 2) = 2; 
  
 最終的にこれでいけました。 
 function GetHexLen(const P1, P2: TPoint): Integer; 
 var 
  W, H: Integer; 
 begin 
  W := Abs(P2.X - P1.X); 
  H := Abs(P2.Y - P1.Y); 
  if H <= W * 2 then 
  begin 
   if (Odd(P1.Y) and (P1.X >= P2.X)) or 
    ((not Odd(P1.Y)) and (P1.X <= P2.X)) then 
    Result := H + W - H div 2 
   else 
    Result := W + H div 2 
  end else 
   Result := H; 
 end; 
 のように(1,0)−(0,1)が2になりそうな予感…。 
 ソース、ぷりーず。 
302: 301 [sage] 03/05/29 23:44 ID:mpTwdvzD(2/2) AAS
 301訂正。 「右上」だからこうですね。 
 5 4 3 3 3 3 4 5 6 
 5 4 3 2 2 2 3 4 5 
   4 3 2 1 1 2 3 4 5 
   4 3 2 1 0 1 2 3 4 
     4 3 2 1 1 2 3 4 5 
     5 4 3 2 2 2 3 4 5 
       5 4 3 3 3 3 4 5 6
303: 名前は開発中のものです。 [sage] 03/05/29 23:52 ID:vzkpDIV0(1) AAS
 というか、>>277277(2): 名前は開発中のものです。 [sage] 03/05/18 03:31 ID:mv38V9jc(1/2) AAS
 今適当に思いついた奴だけど、 
 □■□□□   ■=移動軸、★=目標、☆=自分 
  ★■□□■ 
 □□■□■ 
  □□■■□ 
 ■■■☆■ 
 をちょっとずらして 
 □■□□□ 
   ★■□□■ 
   □□■□■ 
     □□■■□ 
     ■■■☆■ 
 とすると、ヘックスの移動が、普通の四角マスでの 
 ・縦移動(HEXの右上左下方向の移動) 
 ・横移動(HEXの横方向の移動) 
 ・左上右下移動(HEXの左上右下方向の移動) 
 に対応することになる。 
 で、目標から上下左右(斜めは考慮する必要なし)にある一番近い軸までの距離と、 
 軸との交点から自分(中心)までの距離を足せば、移動距離となる、ハズ。 
  
 上の例だと斜めの軸までの距離が1、☆までが3、合計の移動距離が4が結論ということになる。 
  
 でも、障害物とか地形効果とか考えると単純に距離だけ求めても、とか思うんだけどどうだろ? 
がそれだよね? 
304: 名前は開発中のものです。 [sage] 03/05/30 07:58 ID:3BAmLi+J(1) AAS
 おおそうか、すでに既出だったか。 
  
 白い四角と黒い四角はNGワードに入れてたから見えなかったよ。
305(2): 288 [sage] 03/06/03 20:41 ID:dV3uJJSo(1) AAS
 >>296 
 レス遅れましたが、ありがとうございました。 
 お陰で苦にならない速度で描画出来るように(´ー`) 
  
 現在、立ち絵やシナリオウィンドウにアンチエイリアスを 
 かける処理を考えてるんですが、単純にぼかしをかけた 
 マスク画像を用意して、それを重ねるのが一番簡単でしょうか? 
 ぼかしをかけるサンプルを適当に拾って弄ってるんですが、 
 なんか実行時に使うと、やたらと時間がかかるので… 
306: 296 [sage] 03/06/03 22:24 ID:VCAAEscw(1) AAS
 >>305 
 多少はお役に立ったようで何より。 
  
 アンチエイリアスですが……、私の知っている限りでは一枚絵ではちょっと 
 難しいと思います。 
 やはり仰る通り、アンチエイリアスのかかったマスクを、背景とαブレンドで 
 合成してから、立ち絵を描写した方がよろしいかと。 
307(1): 296 [sage] 03/06/04 01:33 ID:yTkfegdd(1/2) AAS
 >>305 
 外部リンク[lzh]:forgamedev.zombie.jp 
 酔いが醒めたので、ちょっとやってみました。 
 データは 288 さんの流用&マスク画像が綺麗でないのはご勘弁のほどを…。 
308: 296 [sage] 03/06/04 04:16 ID:yTkfegdd(2/2) AAS
 外部リンク[LZH]:forgamedev.zombie.jp 
 >307 では立ち絵のラインが黒であることを前提にソース書いてしまったので、 
 あわてて訂正しました。 
309: 名前は開発中のものです。 [sage] 03/06/22 13:05 ID:y5Eb7E/r(1) AAS
 すいません 
 データをLZ77圧縮(展開)したいのですが、 
 Delphiじゃできませんかね 
310: 名前は開発中のものです。 [sage] 03/06/25 18:58 ID:Te9Juqzm(1) AAS
 Delphiで出来ないことなんてそんなにないから安心しろ 
311: 名前は開発中のものです。 [] 03/06/26 02:54 ID:N77Il6kb(1) AAS
 Delphiにzlibのコンポーネントとかついてなかったっけ? 
上下前次1-新書関写板覧索設栞歴
あと 665 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s