game-physics 相关问题

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

当我将脚本附加到对象时,为什么 Unity 的重力会破坏?

我正在Unity中制作一个卡丁车赛车,并开发了玩家控制的脚本。由于某种原因,当我将此脚本附加到游戏对象时,该对象的下落速度比正常情况下慢 100 倍

回答 1 投票 0

如何像超级马里奥一样设计游戏中的跳跃?

我在设计角色的移动和跳跃时,想要实现类似《超级马里奥》中的跳跃效果,但我不知道如何实现这个效果。我试了几次...

回答 1 投票 0

运动取决于帧速率。我怎样才能使它独立于帧速率

我对编码还很陌生。到目前为止,我搜索了很多东西,但仍然无法解决我的问题。我正在尝试使游戏对象遵循线条/图形。我试图给他一个负 Y 速度...

回答 2 投票 0

为什么在这个简单的例子中垂直速度趋向于零?

我有 4 个完美弹性的墙,排列成一个盒子,还有一个零重力下的完美弹性球。球的初始速度为 (100., 100.),并且应该在 ...

回答 1 投票 0

Rust Rapier 物理学:为什么在这个简单的例子中垂直速度趋向于零

我有 4 个完美弹性的墙,排列成一个盒子,还有一个零重力下的完美弹性球。球的初始速度为 (100., 100.),并且应该在 ...

回答 1 投票 0

迷宫/网格续 - 寻找最佳解决方案 - 记忆/学习问题(JAVA)

关于此处找到的先前问题:连接迷宫/网格的墙壁,使所有墙壁相互连接 目前我的机器人读取网格位置在左前方、正前方和

回答 1 投票 0

人工智能和游戏物理

我对编码很陌生,我想构建一个人工智能。我在这个项目中使用 pygame 和 pytorch。有关解决方案或代码格式的任何提示都会有所帮助! 当我运行测试时,它完全可以正常工作

回答 1 投票 0

按 s 或 d 时的移动速度比按 w 或 s 时更慢。 SDL2c

const Uint8*keysState = SDL_GetKeyboardState(NULL); 浮动移动 = 玩家速度 * dt; if (keysState[SDL_SCANCODE_S]) { 玩家.y += toMove; } if (keysState[SDL_SCANCODE_D]) {...

回答 1 投票 0

如何消除使用AddForce方法(Unity)跳跃后速度下降的问题?

我开始制作我的游戏,但遇到了移动问题。我的动作基于新的输入系统和.AddForce()。问题是,当我跳跃时,角色的速度在 l 后下降...

回答 2 投票 0

如何在 Godot 3D 中检测碰撞而不立即解决碰撞?

我正在尝试为 Godot 中的平台游戏玩家控制器创建一个脚本,该脚本不使用内置的碰撞系统 - 来挑战自己。一切都很顺利,直到实施......

回答 1 投票 0

如何移动3D射弹Unity

我正在尝试了解在 Unity 中创建 3D 射弹的过程。在关于创建常规激光弹丸的少数在线帖子中,关于过程的解释很少......

回答 2 投票 0

移动值在被 UnityEvent 取消之前会被重置

我已经使用 Unity 几天了,我正在尝试创建一个简单的平台。我目前正在做基本的玩家角色物理,但我正在尝试使用“新”输入系统并且......

回答 1 投票 0

如何让Unity中的两个运动对象检测重叠?

我正在制作一款非常简单的“游戏”,适合大量玩家。最多 50 名玩家每人用鼠标控制一个对象。当他们让物体接触时,会发出声音......

回答 1 投票 0

跳跃高度和重力与波动的 FPS 不一致(类似 flappybird 的 Javascript 迷你游戏)

在进行游戏测试时(Flappigtrail,v0.1.2),我注意到跳跃高度适用于 144 FPS,但不适用于 60 FPS(60 FPS 的跳跃高度要低得多)。 当玩家跳跃时,player_dy 会变成...

回答 1 投票 0

当启用相机阻尼时,玩家看起来像是传送而不是平滑移动 GODOT

使用阻尼移动相机时,相机或其他不移动的物体看起来不像瞬移。当相机静止时,玩家看起来不像瞬移。玩家看起来不像

回答 1 投票 0

(C#) 无法对移动对象进行限制

我是初学者,别怪我。我目前正在用 C# 编写一个简单的“乒乓球”游戏,只是为了练习一下,因为这是我学习这门语言的第二周。 我试过让 keyev...

回答 1 投票 0

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

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