[過去ログ]
Delphiゲームプログラミング相談室 (976レス)
Delphiゲームプログラミング相談室 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
272: 名前は開発中のものです。 [sage] 03/05/17 15:58 ID:LhaqdzNz >>271 の続き (x0,y0)〜(y1,y0)の距離を出したかったら、 xq0 := (x0 * 2)+(x0 mod 2); yq0 := y0 * 2; xq1 := (x1 * 2)+(x1 mod 2); yq1 := y1 * 2; xlen := Abs(x1-x0)+1; ylen := Abs(y1-y0)+1; hexlen := Sqrt( xlen*xlen + ylen*ylen ) / 2 + 1; で、算出できるはずです。(メンドいから整数と実数の変換は略) http://echo.5ch.net/test/read.cgi/gamedev/1006249204/272
273: 名前は開発中のものです。 [sage] 03/05/17 16:01 ID:LhaqdzNz >>272 ゴメン、間違えた。 × xlen := Abs(x1-x0)+1; ylen := Abs(y1-y0)+1; じゃなくて ◎ xlen := Abs(xq1-xq0)+1; ylen := Abs(yq1-yq0)+1; ね。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/273
274: 272 [sage] 03/05/17 16:16 ID:LhaqdzNz >>272 また訂正。 何やってるんだ俺は……。(恥) xq0 := (x0 * 2)+(y0 mod 2); yq0 := y0 * 2; xq1 := (x1 * 2)+(y1 mod 2); yq1 := y1 * 2; xlen := Abs(xq1-xq0)+1; ylen := Abs(yq1-yq0)+1; hexlen := Sqrt( xlen*xlen + ylen*ylen ) / 2 + 1; http://echo.5ch.net/test/read.cgi/gamedev/1006249204/274
275: 268 [sage] 03/05/18 00:57 ID:RcPQLtqQ 4分割は新鮮でしたが、 (0,0)-(1,3) が 5 になるのですけど。 x0 = 0; y0 = 0; x1 = 1; y1 = 3; xq0 = 0; yq0 = 0; xq1 := (1 * 2) + (3 mod 2) = 3; yq1 := 3 * 2 = 6; xlen := Abs(3)+1 = 4; ylen := Abs(6)+1 = 7; hexlen := Sqrt(4*4 + 7*7) / 2 + 1 = 5.03; http://echo.5ch.net/test/read.cgi/gamedev/1006249204/275
276: 272 [sage] 03/05/18 02:18 ID:MA7QNrHO >>275 ホンマや…。 ちょっと昔のソース探してみます。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/276
277: 名前は開発中のものです。 [sage] 03/05/18 03:31 ID:mv38V9jc 今適当に思いついた奴だけど、 □■□□□ ■=移動軸、★=目標、☆=自分 ★■□□■ □□■□■ □□■■□ ■■■☆■ をちょっとずらして □■□□□ ★■□□■ □□■□■ □□■■□ ■■■☆■ とすると、ヘックスの移動が、普通の四角マスでの ・縦移動(HEXの右上左下方向の移動) ・横移動(HEXの横方向の移動) ・左上右下移動(HEXの左上右下方向の移動) に対応することになる。 で、目標から上下左右(斜めは考慮する必要なし)にある一番近い軸までの距離と、 軸との交点から自分(中心)までの距離を足せば、移動距離となる、ハズ。 上の例だと斜めの軸までの距離が1、☆までが3、合計の移動距離が4が結論ということになる。 でも、障害物とか地形効果とか考えると単純に距離だけ求めても、とか思うんだけどどうだろ? http://echo.5ch.net/test/read.cgi/gamedev/1006249204/277
278: 名前は開発中のものです。 [sage] 03/05/18 03:32 ID:mv38V9jc 行頭の半角スペースは無視されるんだった…。 □■□□□ ■=移動軸、★=目標、☆=自分 ★■□□■ □□■□■ □□■■□ ■■■☆■ こうね。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/278
279: 268 [sage] 03/05/18 05:00 ID:enzpE3WK >>277 移動させるときはリアルタイムストラテジースレにあるA*アルゴリズムを考えています。 なんか、ちんぷんかんぷん。 654444456 543333456 543222345 432112345 432101234 432112345 543222345 543333456 654444456 654444456 543333456 543222345 432112345 432101234 432112345 543222345 543333456 654444456 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/279
280: 272@眠 [sage] 03/05/18 05:59 ID:GM64wXCS >>270 >>275 昔のソース見たら、やはり Sqrt を使った >>274 の方法だった…。 よく、動いていたな〜。 この直線距離は単なる目安だったからかも。 それで、やっと”コマを動かす距離”を出せましたわ…。 コレでいいはず。 xlen := Abs(x1-x0); ylen := Abs(y1-y0); if xlen <= (ylen div 2) then hexlen := ylen else hexlen := xlen + ylen - (ylen div 2); 0 1 2 3 4 1 2 3 4 5 ← 1つずらしレンガ状の移動距離を… 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 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/280
281: 272@眠 [sage] 03/05/18 06:05 ID:GM64wXCS >>279 経路探索は、ちゃんとやっていたんですけどね。(笑) ちゃんと消費移動量出して。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/281
282: 名前は開発中のものです。 [sage] 03/05/18 23:17 ID:Vqiijavw >>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; http://echo.5ch.net/test/read.cgi/gamedev/1006249204/282
283: 272 [sage] 03/05/19 00:13 ID:xetwIoTi >>282 あう。 何度も何度もすいませんでした。 (0,0)からしか検算していなかった私のミスです。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/283
284: 名前は開発中のものです。 [sage] 03/05/19 01:16 ID:RdOoX7kJ きにすんな http://echo.5ch.net/test/read.cgi/gamedev/1006249204/284
285: 名前は開発中のものです。 [sage] 03/05/20 01:21 ID:mVYsvlCM 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; http://echo.5ch.net/test/read.cgi/gamedev/1006249204/285
286: 名前は開発中のものです。 [sage] 03/05/20 02:17 ID:zL9Q18du >>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 へ読み込ませては? http://echo.5ch.net/test/read.cgi/gamedev/1006249204/286
287: 名前は開発中のものです。 [sage] 03/05/20 13:06 ID:mVYsvlCM >>286 見事に軽くなりました(´ー`) ありがとうございますた。 ImageListコンポーネントは使ったことがないのですが、 ちょっと弄ってみることにします。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/287
288: 名前は開発中のものです。 [sage] 03/05/21 02:17 ID:yuA7Jdfb 質問です。 ■■■ ■□■ ■■■ (元絵:□が残したい部分・■が黒塗りつぶし) □□□ □■□ □□□ (マスク:□が白塗りつぶし・■が残したい部分の黒塗りつぶし) を、OR→AND演算で表示すれば半透明化出来ると思うのですが、 ↑のマスク画像無しで、半透明化するにはどうすればいいのでしょうか? # ADVなエロゲーを再現しようと思ってるのですが、画像を抜き出してみたところ、 # 手元のゲーム(VisualArts系やDOのゲーム等)では、各キャラクターの立ち絵に # マスク用画像が用意されてなく、黒背景に立ち絵が描いてある画像しか # 入ってませんでした。これらは、何か別の画像と論理演算を行って # 半透明化させてるんでしょうか? http://echo.5ch.net/test/read.cgi/gamedev/1006249204/288
289: 名前は開発中のものです。 [sage] 03/05/21 02:49 ID:8zKfauhG マスク画像は実行時に作成しているか、 1ピクセルずつ合成してるんじゃないの? SRCANDやSRCPAINT以外にもたくさんの合成方法があるけど、 1回のBitBltで透過させる事は不可能だと思う。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/289
290: 名前は開発中のものです。 [sage] 03/05/21 03:36 ID:pDtj6lgc >>288 TBitmap の ScanLine を使って、>>289 さんの仰るとおり 1 pixel ごとに 処理するヨロシ。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/290
291: 名前は開発中のものです。 [sage] 03/05/23 14:57 ID:gD+lmxCD ttp://www.geocities.jp/buin2gou2/delphi/DelphiTABM.htm http://echo.5ch.net/test/read.cgi/gamedev/1006249204/291
292: 名前は開発中のものです。 [sage] 03/05/24 02:30 ID:LSDvOFkW 291は何なの!? 荒らしいらい? http://echo.5ch.net/test/read.cgi/gamedev/1006249204/292
293: 名前は開発中のものです。 [sage] 03/05/24 03:57 ID:o6GsTVdQ >>288 TImageのプロパティで出来るじゃん http://echo.5ch.net/test/read.cgi/gamedev/1006249204/293
294: 名前は開発中のものです。 [sage] 03/05/24 11:34 ID:FLU40T1i >>288 Doは知らんがVisualArts系にはマスク部分ある。確か立ち絵のファイルといっしょになってる。 画像抜くのに使ってるソフトによってはマスク部分が無視される。 というかあれのマスク部分考慮してる抜き出しソフト見たことない。あんまり需要無いしな。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/294
295: 288 [sage] 03/05/25 03:35 ID:OUd92QaS >>289 >>290 ttp://www.sm.rim.or.jp/~shishido/delmono.html とりあえず↑のサイトを参考に(というかほぼコピペ)作ってみますた。 ttp://www.geocities.co.jp/SiliconValley/1115/adv01.zip 1ピクセル単位で色を取得、黒だったら白に、それ以外の色だったら 黒にするという処理を行いました。ただ、問題点が2つほど… ・For文で回してる処理が非常に遅い(scanlineのせい?) ・残したいキャラに含まれている黒色までマスク化してしまう(目の黒など) この2つが非常に悩ませてくれます… 上はともかく、下は 見た目に非常に影響するので(;´д⊂ やはり、透明化したくない 部分の黒色だけ、塗りつぶさないような条件処理でしか 解決策はないんでしょうか? >>293 Transparentプロパティを使えば出来ますが、プログラムで再現したかったのでつ… >>294 とりあえず一番簡単な方法である、Susieにプラグイン入れて 画像抜き出しやってるんですが、マスク画像は入ってるのですね。 じゃぁDOの方も、立ち絵ファイルと一緒になってたりするのかしら… http://echo.5ch.net/test/read.cgi/gamedev/1006249204/295
296: 290 [sage] 03/05/25 17:23 ID:ll42N4KR >>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 の方が わかりやすいでしょうか) http://echo.5ch.net/test/read.cgi/gamedev/1006249204/296
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 680 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.022s