- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在一个点(这是我们的玩家位置)前面定义一个 2D 平面区域,并检查其中有哪些点(敌人)。在游戏中,它用于确定我们面前的“盒子”内有哪些敌人,其X宽度、Y高度和Z长度。
我需要帮助计算飞机的左下角和右上角点。
输入:我们知道球员的位置并且知道球员的轮换。只有玩家的 Y 旋转很重要,因为飞机应该始终位于玩家的前面。
我们知道平面的宽度和长度。在这种情况下,高度无关紧要,我知道如何计算它。如果宽度为 8 米,长度为 20,如果玩家位置为 0,0,0,左下点将为 X= -4/Y = 0/Z = 0,右上角点将为 X=4/Y = 0/Z = 20
我的代码仅在玩家 Y 旋转为 0 时才有效,因为我只是将宽度/长度添加到当前的 X 和 Z 值。我需要正确的数学公式来确定左下点和右上角点的位置,并考虑玩家的 Y 旋转参数,以便平面区域始终与玩家所面对的方向相同
这是我所需要的直观表示:
https://gyazo.com/fd5ad0e393f6db8236ee7fd766e7286b
`
float AreaWidth = 8;
float AreaLength = 20;
float AreaHeight = 10;
Point AreaBTMLeftPoint = new Point(PlayerPosition.getX()-(AreaWidth/2),
PlayerPosition.getLoc().getY(), PlayerPosition.getLoc().getZ());
Point AreaTOPRightPoint = new Point(PlayerPosition.getLoc().getX()+
(AreaWidth/2), PlayerPosition.getLoc().getY(),
PlayerPosition.getLoc().getZ()+(AreaLength));
float AreaBTMX = AreaBTMLeftPoint.getX();
float AreaBTMZ = AreaBTMLeftPoint.getZ();
float AreaTOPX = AreaTOPRightPoint.getX();
float AreaTOPZ = AreaTOPRightPoint.getZ();
float AreaMaxY = PlayerPosition.getLoc().getY()+(AreaHeight/2);
float AreaMinY = PlayerPosition.getLoc().getY()-(AreaHeight/2);
if (TargetPosition.getLoc().getX() > AreaBTMX &&
TargetPosition.getLoc().getX() < AreaTOPX &&
TargetPosition.getLoc().getY() > AreaMinY &&
TargetPosition.getLoc().getY() < AreaMaxY &&
TargetPosition.getLoc().getZ() > AreaBTMZ &&
TargetPosition.getLoc().getZ() < AreaTOPZ) {
This target is inside the area, do stuff.
}`
最佳答案
设玩家位置为P,方向角为Fi,目标位置为T。
单位方向 vector D:
d.x = cos(Fi) //don't forget about radians
d.y = sin(Fi)
差异 vector
PT = T - P = (T.x - P.x, T.y - P.y)
T到玩家方向线的垂直距离为正交投影的长度
perplen = Abs(Pt x D) = //cross product
Abs(PT.x * d.y - Pt.y * d.x)
compare it with (AreaWidth/2)
沿方向线的距离:
alonglen = (Pt .dot. D) = //dot product
PT.x * d.x + PT.y * d.y
it should be >=0 and <= than AreaLength
如果两个条件都成立,则目标位于倾斜矩形内
概念验证 Delphi 代码:
var
i, px, py, tx, ty, XX, YY, ptx, pty: Integer;
perplen, alonglen: Double;
wdt, lng: Integer;
Fi, cs, sn: Double;
begin
px := 300; py := 300;
wdt := 150; lng := 250;
Fi := Pi / 6; cs := Cos(Fi); sn := Sin(Fi);
Canvas.Brush.Color := clBlack;
Canvas.Ellipse(px - 5, py - 5, px + 6, py + 6); //player
Canvas.Brush.Style := bsClear;
Canvas.MoveTo(px, py);
XX := px - Round(Wdt / 2 * sn); YY := py + Round(Wdt / 2 * cs);
Canvas.LineTo(XX, YY);
XX := XX + Round(lng * cs); YY := YY + Round(lng * sn);
Canvas.LineTo(XX, YY);
XX := XX + Round(Wdt * sn); YY := YY - Round(Wdt * cs);
Canvas.LineTo(XX, YY);
XX := XX - Round(lng * cs); YY := YY - Round(lng * sn);
Canvas.LineTo(XX, YY);
Canvas.LineTo(px, py); //rectangle finished
for i := 0 to 99 do begin
tx := 100 + Random(600); //random target
ty := 100 + Random(600);
ptx := tx - px;
pty := ty - py;
perplen := Abs(ptx * sn - pty * cs);
alonglen := ptx * cs + pty * sn;
if (perplen <= Wdt / 2) and (alonglen >= 0) and (alonglen <= lng) then
Canvas.Brush.Color := clBlue // in region
else
Canvas.Brush.Color := clRed;
Canvas.Ellipse(tx - 3, ty - 3, tx + 4, ty + 4);
end;
关于java - 3D 考虑玩家 Y 旋转,创建一个到一定距离的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599014/
这个问题在这里已经有了答案: What does the question mark character ('?') mean in C++? (8 个答案) 关闭 7 年前。 这一行我看不懂为什么
在构建模式下甚至可以有两个玩家吗?查看 Roblox 开发者杂志文章“What did you sleigh?”,它在玩家列表中显示了两个“玩家”。 最佳答案 打开 Roblox Studio 转到任
在构建模式下甚至可以有两个玩家吗?查看 Roblox 开发者杂志文章“What did you sleigh?”,它在玩家列表中显示了两个“玩家”。 最佳答案 打开 Roblox Studio 转到任
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
“Clash of Clans”使用 Game Center 对玩家进行身份验证并将其与现有的远程存储游戏状态相关联。 据我所知,游戏仅在客户端提供玩家标识符。是否有支持的技术来安全地验证用户而不是仅
我正在开发多人游戏,但我无法找出如何将其他客户端连接到创建的游戏。我的意思是客户端 A 创建到服务器的套接字连接,其他客户端(A,B ...)如何连接到客户端 A?有人可以帮我吗? 附注我是网络编程新
我正在尝试使用浏览器控制台一步一步地制作井字游戏,并最终改进我的功能。然而,我被困在玩家2回合(ttt_player2_turn()),我必须检查箱子是否为空。看来我在这个例子中的论证有问题。感谢您的
如果我向上移动玩家 1 和玩家 2,假设我按下玩家 1 的向下键,我的玩家将停止向上移动。我找不到问题所在。有人可以帮助我并解释我做错了什么吗? package game; import java.a
我正在创建一个自上而下的 2D 游戏,并且使用 Box2D 来模拟物理,我的问题是: 如何使玩家保持与我的宇宙飞船的相对速度,并且仍然能够在飞船也在移动的情况下围绕我的玩家移动? 我在下面放了一个插图
我是 Java 新手,我正在尝试制作一个简单的游戏来娱乐。我首先尝试将 repaint 放入 PaintComponent() 中,它一直有效,直到我尝试添加一些背景。有谁知道如何让我的玩家在有或没有
//我正在尝试对玩家 2 的代码进行一些编辑,因此我删除了涉及玩家 1 的所有内容。但出于某种原因,如果没有玩家 1 的代码,玩家 2 根本不会执行任何操作。(假设使用 i、j、k 和 l 键 mov
我接到了一项任务,要编写一个由人类玩家和 AI 玩家组成的 NIM 游戏。游戏是“Misere”(最后一个必须拿起一根棍子的人输了)。 AI 应该使用 Minimax 算法,但它正在采取使其输得更快的
我是一名优秀的程序员,十分优秀!