[過去ログ]
Delphiゲームプログラミング相談室 (976レス)
Delphiゲームプログラミング相談室 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
269: 名前は開発中のものです。 [sage] 03/05/16 06:42 ID:pbS0hPxo >268 もちっと詳しく書かないとHEXの何をどうしたいのかがわからんぞ http://echo.5ch.net/test/read.cgi/gamedev/1006249204/269
270: 268 [sage] 03/05/17 02:34 ID:IP6oP4NN 2HEX間の距離(HEXの数)を数えたいのです。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/270
271: 名前は開発中のものです。 [sage] 03/05/17 15:57 ID:LhaqdzNz >>270 ああ、HEXマップをいじっている時に私もつまづいたなぁ…。 とりあえず、私の使っている方法。 ”HEXマップにおける距離”=”ユニット(コマ)が進む数”だから、 0 1 2 3 ┌─┬─┬─┬─┬ 0│ │ │ │ │ └┬┴┬┴┬┴┬┴ 1 │ │ │ │ ┌┴┬┴┬┴┬┴┬ 2│ │ │ │ │ …のように、レンガ壁状のマップで考えます。 そして、この1コマを4分割。 □□□□□□□□ □□□□□□□□ □□□□□□□□ □□□□□□□□ □□□□□□□□ □□□□□□□□ あとは、直線の距離を出して、2で割ればOK。 http://echo.5ch.net/test/read.cgi/gamedev/1006249204/271
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 683 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.024s