[過去ログ] Delphiゲームプログラミング相談室 (976レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
282(2): 名前は開発中のものです。 [sage] 03/05/18 23:17 ID:Vqiijavw(1) AAS
>>280280(1): 272@眠 [sage] 03/05/18 05:59 ID:GM64wXCS(1/2) AAS
>>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
今度は(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;
283: 272 [sage] 03/05/19 00:13 ID:xetwIoTi(1) AAS
>>282
あう。 何度も何度もすいませんでした。
(0,0)からしか検算していなかった私のミスです。
301(1): 名前は開発中のものです。 [sage] 03/05/29 23:33 ID:mpTwdvzD(1/2) AAS
>>300300(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
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
になるということですか。
うーん、 >>282 のように(1,0)−(0,1)が2になりそうな予感…。
ソース、ぷりーず。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.032s