[過去ログ] Delphiゲームプログラミング相談室 (976レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
296(5): 290 [sage] 03/05/25 17:23 ID:ll42N4KR(1/3) AAS
 >>295295(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の方も、立ち絵ファイルと一緒になってたりするのかしら…  
ソース拝見いたしました。 
 > ・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 は、描画ごとに毎回やるには 
 むちゃくちゃ遅いです。>>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 へ読み込ませては?  
のようにTImageかTImageListに、あらかじめ格納しておくに一票。 
  
 >>292TAlphaBitmapっていうグラフィックエンジンの紹介かと 
  
 >>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のコンポーネントとかついてなかったっけ? 
312: 名前は開発中のものです。 [sage] 03/07/05 04:44 ID:orfgb7f5(1) AAS
 漏れもDelphiでなんかつくってみたくて、ここにたどり着きますた(・∀・)保守っとこ 
313: 名前は開発中のものです。 [sage] 03/07/05 11:10 ID:C5JjctVn(1) AAS
 保守なんていらんつーに 
314(2): 名前は開発中のものです。 [] 03/07/08 20:57 ID:q5vqgPew(1) AAS
 すいませんが教えてください。 
 LightWaveで作った3Dのオブジェクトを使って 
 PC上でバイクを改造するプログラムを作りたくて 
 Delphiを始めたのですが、どうやって読み込むのかわかりません。 
 検索してみてもその辺の解説が見つからないので 
 もしご存知でしたら教えてください。 
315(1): 名前は開発中のものです。 [sage] 03/07/08 23:06 ID:DRXvm1Tv(1) AAS
 >>314 
  
 >>2の下方のリンク行け 
316: 名前は開発中のものです。 [] 03/07/09 06:01 ID:/lHa0Xtu(1) AAS
 外部リンク[cgi]:esenden.com 
317: 名前は開発中のものです。 [] 03/07/09 07:28 ID:z+m4emKo(1) AAS
 P2PMMORPG「P2PREGARO」 
 2chスレ:mmominor 
  
 プログラマーきてください。 
318: 名前は開発中のものです。 [sage] 03/07/09 07:33 ID:O4cmYx83(1) AAS
 なんでテメーはさっきからDelphiのスレなんかに貼ってるんだよ 
319(1): 名前は開発中のものです。 [] 03/07/09 11:06 ID:ql5zHAJ+(1) AAS
 ちょっと難しいかもしれませんが、  
 別プロセスの確保してるメモリのアドレスを指定して、その値を貰ってきたい場合の方法が解る方教えて頂けませんか?  
 ・プロセス名でそのプロセスの使用しているメモリ領域の取得が可能でしょうか?可能ならその方法。  
 ・別プロセスの使用しているメモリ領域の値の取得方法。  
  
 以上2点、もちろん1点でもかまいません。  
 解る方、ご教授くださいm(_ _)m
320: 名前は開発中のものです。 [] 03/07/09 11:07 ID:KtHg7Cpg(1) AAS
 ☆頑張ってまーす!!☆女の子が作ったサイトです☆ 
        ☆見て見て!! 
 外部リンク[html]:yahooo.s2.x-beat.com
上下前次1-新書関写板覧索設栞歴
あと 656 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.019s