game-physics 相关问题

游戏物理学是关于实现,创造,优化以及与游戏中的物理相关的任何其他事物。物理控制游戏中每个物理对象的交互,其中任何2d或3d模型与游戏中对象的任何其他2d或3d模型交互。物理学用于给出这种相互作用的真实效果。

Godot 4 3D 中的抓斗/摇摆系统

我对 Godot 相当陌生,但对 Unity 和 Python 有一点经验。我的目标是拥有一个像《卡尔森》游戏中使用的那样的擒抱系统,你可以向后摆动和第四/侧面......

回答 1 投票 0

为什么要通过模型视图矩阵的逆矩阵的转置来变换法线?

我正在研究一些着色器,我需要转换法线。 我在一些教程中读到转换法线的方式是将它们与模型视图矩阵的逆矩阵的转置相乘...

回答 6 投票 0

简单 javascript 游戏中的碰撞

我正在用 javascript 编写一个简单的游戏,我想知道处理玩家和世界对象之间碰撞的最佳方法是什么。 var isJumping = false; var isFalling = fa...</desc> <question vote="0"> <p>我正在用 JavaScript 编写一个简单的游戏,我想知道处理玩家和世界对象之间碰撞的最佳方法是什么。</p> <pre><code>&lt;script&gt; var isJumping = false; var isFalling = false; var w = 1; var recwidth = 400; var recheight = 400; var xpos = 50; var ypos = 279; window.onload = function() { var FPS = 30; var ground = new myObject(); setInterval(function() { clear(); draw(); ground.draw(0, 325); ground.draw(125,325) }, 1000/FPS); }; function myObject(){ this.draw = function drawground(groundx, groundy){ var canvas = document.getElementById(&#39;canvas&#39;) var context = canvas.getContext(&#39;2d&#39;); //context.fillRect(xpos,ypos,100,100); var img=new Image() img.src=&#34;ground.png&#34; img.onload = function() { context.drawImage(img,groundx,groundy)} } }; function jump() { var t=.1; isJumping=true; var jumpint= setInterval(function() { yup = 12*t-(5*t*t); ypos= ypos - yup; t = t + .1 if(yup &lt; 0) { isJumping = false; isFalling = true; clearInterval(jumpint); jumpint = 0; fall(); return; } }, 20); } function fall() { t=.10 var fallint= setInterval(function() { ydown = (5*t*t); ypos= ypos + ydown; t = t + .1 if(ypos &gt; 275) { isFalling == false; clearInterval(fallint); fallint = 0; return; } }, 20); } function changex(x){ xpos = xpos + (x); //clear(); //draw(); } function changey(y){ ypos = ypos + (y); //clear(); //draw(); } function draw(){ var canvas = document.getElementById(&#39;canvas&#39;) var context = canvas.getContext(&#39;2d&#39;); var img=new Image() img.src=&#34;character.png&#34; img.onload = function() { context.drawImage(img,xpos,ypos)} } function clear(){ var canvas = document.getElementById(&#39;canvas&#39;) var context = canvas.getContext(&#39;2d&#39;); context.clearRect(0,0, canvas.width, canvas.height); } document.onkeydown = function(event) { var keyCode; if(event == null) { keyCode = window.event.keyCode; } else { keyCode = event.keyCode; } switch(keyCode) { // left case 37: //left changex(-5); break; // up case 38: // action when pressing up key jump(); break; // right case 39: // action when pressing right key changex(5); break; // down case 40: // action when pressing down key changey(5); break; default: break; } } &lt;/script&gt; </code></pre> <p>因此,正如您所看到的,到目前为止我正在创建两个对象,并且玩家在任意点停止掉落。我觉得这个阶段的碰撞不会太困难,但是一旦我开始添加更多,我觉得它会变得更加困难。我不会为对象的每个实例使用具有相同图像的对象实例,因此在某些时候我将更改 myobject 函数以能够接受图像作为参数,然后检查碰撞会有点棘手。我还计划将其制作为横向卷轴,因此一旦击中地图的一端,它就会更改为下一个区域,这将导致性能问题。如果我每隔一段时间就检查整个游戏中每个对象的碰撞情况,我想事情会变得很慢。限制检查的冲突数量的最佳方法是什么?显然,如果该对象不在屏幕上,则无需检查它,但有没有办法限制它。我正在考虑为游戏的每一帧创建一个数组,并用它的对象填充该数组。然后,只检查玩家当前所在帧的数组。这是否可行,还是会导致太多问题?任何帮助是极大的赞赏。 </p> </question> <answer tick="false" vote="-1"> <p>编辑: 您可以使用 <pre><code>(sprite.x &lt; sprite2.x + sprite2.width &amp;&amp; sprite.x + sprite.width &gt; sprite2.x &amp;&amp; sprite.y &lt; sprite2.y + sprite2.height &amp;&amp; sprite.y + sprite.height &gt; sprite2.y)</code></pre> 进行矩形碰撞,使用 <pre><code>Math.hypot(sprite.x, sprite.y) - Math.hypot(sprite2.x, sprite2.y) &lt;= 0</code></pre> 进行圆形碰撞,以及将它们组合起来以形成相对准确的边界框。</p> <p>如果你想要像素完美的碰撞,我有一些简单的 JavaScript 代码,可以与 canvas2d 渲染上下文配合使用。</p> <pre><code>function collide(sprite, sprite2, minOpacity=1) { // Rectangular bounding box collision if (sprite.x &lt; sprite2.x + sprite2.width &amp;&amp; sprite.x + sprite.width &gt; sprite2.x &amp;&amp; sprite.y &lt; sprite2.y + sprite2.height &amp;&amp; sprite.y + sprite.height &gt; sprite2.y) { // Finds the x and width of the overlapping area var overlapX = (this.rect.x &gt; other.rect.x) ? [this.rect.x, (other.rect.x + other.rect.width) - this.rect.x + 1] : [other.rect.x, (this.rect.x + this.rect.width) - other.rect.x + 1]; // Finds the y and height of the overlapping area var overlapY = (this.rect.y + this.rect.height &gt; other.rect.y + other.rect.height) ? [this.rect.y, (other.rect.y + other.rect.height) - this.rect.y + 1] : [other.rect.y, (this.rect.y + this.rect.height) - other.rect.y + 1]; // Creates a canvas to draw sprite.image to var spriteImageCanvas = new OffscreenCanvas(overlapX[0] + overlapX[1], overlapY[0] + overlapY[1]); var spriteImageCanvasContext = spriteImageCanvas.getContext(&#34;2d&#34;); // Draws sprite.image to spriteImageCanvasContext spriteImageCanvasContext.drawImage(this.image, sprite.x, sprite.y, sprite.width, sprite.height); // Creates a canvas to draw sprite2.image to var sprite2ImageCanvas = new OffscreenCanvas(overlapX[0] + overlapX[1], overlapY[0] + overlapY[1]); var sprite2ImageCanvasContext = otherImageCanvas.getContext(&#34;2d&#34;); // Draws sprite2.image to sprite2ImageCanvasContext sprite2ImageCanvasContext.drawImage(sprite2.image, sprite2.x, sprite2.y, sprite2.width, sprite2.height); // Loops through the x coordinates in the overlapping area for (var x = overlapX[0]; x &lt;= overlapX[0] + overlapX[1]; x++) { // Loops through the y coordinates in the overlapping area for (var y = overlapY[0]; y &lt;= overlapY[0] + overlapY[1]; y++) { if (/* Checks if the pixel at [x, y] in the sprite image has an opacity over minOpacity input */ thisImageCanvasContext.getImageData(x, y, 1, 1).data[3] &gt;= minOpacity &amp;&amp; /* Checks if the pixel at [x, y] in the sprite2 image has an opacity over minOpacity input */ otherImageCanvasContext.getImageData(x, y, 1, 1).data[3] &gt;= minOpacity) { return true; }; }; }; }; } </code></pre> <p>或者,如果您只想矩形碰撞,请使用函数中的第一个 if 语句。</p> </answer> </body></html>

回答 0 投票 0

简单的突围游戏中的碰撞检测

我正在用java制作一个简单的突破游戏作为大学作业,我需要迫切的帮助来使上面的方块具有命中检测功能。作业的详细信息是需要...

回答 1 投票 0

使用 Unity ConfigurableJoint 在零重力下出现意外的旋转行为

我有两个通过 ConfigurableJoint 连接的立方体,漂浮在零重力中。 XYZ 运动被锁定,并且 XYZ 角度运动受到限制。在某些关节配置中,当我设置目标旋转时...

回答 1 投票 0

动画没有参考

伙计们,当我开始游戏时一切都很好,但是当我尝试移动我的游戏时停止并导致错误动画 footL 向前奔跑-向右向前奔跑-向左没有接收器!你缺补吗...

回答 1 投票 0

Unity foreach 错误

所以我正在开发一款骰子游戏,一开始我以为这会很容易,但我刚刚发现了一个主要的“错误”。 这是我遇到问题的主要脚本: 使用 System.Collections.Generic; 使用 UnityEng...

回答 1 投票 0

如何找出网格的表面积

图片 我的碰撞盒与我想要计算其表面积的机翼部分重叠,但我不知道如何做到这一点。 因为这是我第一次接触表面积...

回答 1 投票 0

如何解决Unity中的卡住问题?

在 Unity 2D 中,滑动的游戏对象(我的平台游戏中的玩家)有时会卡在两个相邻的 BoxCollider2D 之间的边缘上。在瓦片地图中,这个问题很容易解决

回答 1 投票 0

角色控制器不再掉落

这个问题可能已经在某个地方被问过并得到了回答,但我在 StackOverflow 上没有看到提到过这样的情况。 问题:几天以来,我的游戏对象有一个 CharacterContr...

回答 1 投票 0

UE 4.27.2 服装模拟忽略物理

我正在使用虚幻引擎 4.27.2,并且在让布料模拟响应我在布料配置中设置的物理体时遇到问题。 我尝试简化物理...

回答 1 投票 0

如何计算旋转线反射光线与水平轴的角度?

我有一个C++程序,我想计算光线的反射角。在示例中,我有一条与 X 坐标成 135 度角的黄线(光线),击中...

回答 1 投票 0

MatterJS 预计算最终位置

我正在尝试创建一个简单的 2D 游戏,其中一个球落到地上,受到一些障碍物的影响,这些障碍物会改变球的最终位置。 我正在使用 MatterJS 作为 2D 物理引擎...

回答 3 投票 0

如何阻止我的角色在虚幻引擎 5.3 中从地板上掉下来

当我按下播放按钮时,我的角色会穿过地板。如果可能的话请帮助我,我将非常感激。 我也尝试移动播放器的开始位置,但没有成功。 我尝试在

回答 1 投票 0

我想在 GameMaker 中创建一个单向平台,如何做?

所以我想为我的游戏创建一个单向平台,我是 GameMaker(以及一般编码)的初学者,并且是 StackOverflow 的新手,所以我不知道如何去做。 我有我的 obj_player,有一个 creat...

回答 1 投票 0

Godot C# - 如何实现双跳

我想用 C# 在 Godot 中实现双跳机制,但它没有按预期工作。也许有人在我的代码中发现了问题并可以给我提示! :) 我的角色跳了一次然后...

回答 1 投票 0

如何防止玩家和物体在碰撞时抖动?

我的游戏的 2D 物理有问题。当玩家跳跃并与物体碰撞时,该物体会被稍微推入地面。如何防止碰撞体穿过...

回答 1 投票 0

戈多弹跳物理在第一次弹跳后表现出意外

Godot 4.2.1 - 没有代码,只有节点。 这个场景只有静态物体和刚体。下落的 RigidBody(球)的弹力为 0.5 - 圆形碰撞形状,尽管 s...

回答 1 投票 0

戈多弹跳物理学在第一次弹跳后表现出意想不到的行为

戈多4.2.1 没有代码,只有节点 这个场景只有静态物体和刚体 下落的 RigidBody(球)的弹力为 0.5 - 尽管是方形的圆形碰撞形状...

回答 1 投票 0

如何让玩家只穿过某些物体,而不穿过其他物体?

尝试我的第一个 Unity 项目。这是关于一个自上而下的游泳者的故事。通过切换游泳者的碰撞器,他可以在船下游泳: if (Input.GetKeyDown(KeyCode.A)) SwimmerCircleCollider.enabled = !

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.