我在 2D Java 游戏中遇到碰撞检测问题。
通常,我会为可能与其他对象发生冲突的对象创建一个 getBounds() 方法。此方法将返回 a new Rectangle(x,y,width,height),其中x和y是精灵左上角的坐标,width和height是精灵的宽度和高度。
但是在我目前正在开发的游戏中,有一个由用户控制的“坦克”。只要玩家按住向左或向右箭头按钮之一,该坦克的精灵就会旋转。换句话说,它可以旋转到任何角度。坦克的精灵是一个矩形。
所以我不能简单地做我在这种情况下一直做的事情。
如何检测与这种精灵的碰撞?谢谢
我正在重建经典游戏小行星,我在使碰撞检测正常工作时遇到了一些问题.目前,下面的代码运行良好,但由于某种原因,它只会检测最后一枚已经发射的导弹上的碰撞.我的意思是,如果我在一颗静止的小行星上直线发射3枚导弹,前两颗将穿过小行星,而只有最后一颗将与它碰撞并按预期行动.我不太清楚为什么会这样,但我认为这与迭代导弹列表有关.
这是用于检测冲突的部分工作函数:
void checkMissileAsteroidCollision(struct particle *ast, struct particle *mis)
{
float missileX = 0;
float missileY = 0;
float asteroidX = 0;
float asteroidY = 0;
float asteroidSize = 0;
for( ; mis ; mis = mis->next )
{
missileX = mis->x;
missileY = mis->y;
for( ; ast ; ast = ast->next)
{
asteroidX = ast->x;
asteroidY = ast->y;
asteroidSize = ast->size;
if(missileX < asteroidX + asteroidSize &&
missileX > asteroidX &&
missileY < asteroidY + asteroidSize &&
missileY > …Run Code Online (Sandbox Code Playgroud) void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "Bullet")
{
Destroy(gameObject);
Debug.Log("hit");
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码,我很感激还有很多其他来源,但是我在互联网上查看过,只是无法理解我哪里出了问题。我知道它可能很小。我正在尝试使用标签进行碰撞检测并销毁“此”游戏对象。Bullet 预制件具有 Bullet 标签并且拼写完全相同,两个游戏对象都具有刚体和 2D 盒子碰撞器。
任何帮助都会很棒。
我想在 pygame 中制作一个脚本,其中两个球飞向彼此,当它们碰撞时,它们应该彼此弹开,但我不知道该怎么做,所以你能帮助我吗?
我有一个HashMap,并按以下方式使用:
HashMap<SomeInterface, UniqueObject> m_map;
UniqueObject getUniqueObject(SomeInterface keyObject)
{
if (m_map.containsKey(keyObject))
{
return m_map.get(keyObject);
}
else
{
return makeUniqueObjectFor(keyObject);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我看到不同类的多个对象匹配m_map.containsKey(keyObject)上的相同键.
所以这是我的问题:
这可能吗?Map接口说它使用equals()来比较键是否为空.我没有在任何SomeInterface类中重写equals().这是否意味着equals方法可能是错误的?
如果上述情况属实,那么如果HashMap实际上是同一个对象而不是副本,我怎么才能让它在equals()上返回true?这是否可以通过说if(object1 == object2)?我早期在Java开发中被告知我应该避免这样做,但我从未发现应该何时使用它.
提前致谢.:)
我的箱子碰撞代码不起作用.
bool checkCollide(int x, int y, int oWidth, int oHeight, int xTwo, int yTwo, int oTwoWidth, int oTwoHeight)
{
if (xTwo + oTwoWidth < x)
return false; // box 2 is left of box 1
if (x + oWidth < xTwo)
return false; // box 1 is left of box 2
if (xTwo > x + oWidth)
return false; // box 2 is right of box 1
if (x > xTwo + oTwoWidth)
return false; // box 1 is right …Run Code Online (Sandbox Code Playgroud) 我对CANVAS和Kineticjs都很陌生,但我觉得我正在尝试的事情应该比我做得更容易.基本上这是我到目前为止:
我试图使用的代码来自kineticjs当与另一个解决方案重叠时停止拖动到一个形状但是无法让它工作.
请查看实时jsfiddle 代码
var isRectCollide = function(target, box) {
if (target.x - target.width >= box.x + box.width &&
target.y - target.height >= box.y + box.height &&
target.x + target.width <= box.x + box.width &&
target.x + target.height <= box.y - box.height )
return false;
else
return true;
}
Run Code Online (Sandbox Code Playgroud)
这个想法是粉红色的方块可以拖动,但被橙色框阻挡,一旦拖动橙色框,粉红色框"触摸"蓝色框,弹出应该发生.
我不确定使用kineticjs是否是最简单的实现方法呢?
任何想法,提示或帮助我都会非常感激.
正如标题所示,我遇到了物体碰撞问题......我目前正在使用JavaScript进行2d Html5画布游戏.我知道如何防止"玩家"对象超出游戏画布的宽度/高度,并且我知道当玩家与物体碰撞时如何做某事(例如加电或敌人或其他什么)但我只是不知道如何制作一个"坚实"的物体意味着当玩家击中固体物体时,玩家只是停下来,并且无法通过固体物体.
这就是我现在所拥有的(不是所有的代码只是我觉得相关,对不起,如果它太多/太少:
var canvasPlayer = document.getElementById('canvasPlayer');
var ctxPlayer = canvasPlayer.getContext('2d');
var canvasWalls = document.getElementById('canvasWalls');
var ctxWalls = canvasWalls.getContext('2d');
function checkKeyDown(e) {
var keyID = (e.keyCode) || e.which;
if (keyID === 38 || keyID === 87) { // up arrow OR W key
if (!player1.isDownKey && !player1.isLeftKey && !player1.isRightKey) {
player1.isUpKey = true;
e.preventDefault();
} }
if (keyID === 39 || keyID === 68) { //right arrow OR D key
if (!player1.isDownKey && !player1.isLeftKey && !player1.isUpKey) {
player1.isRightKey = true; …Run Code Online (Sandbox Code Playgroud) 我有一个UIImageview包含一个圆圈(障碍物),然后另一个UIImageview包含另一个图像(我的角色).当我的圈子击中我的角色时,游戏结束.
我的问题发生在游戏结束时,角色触摸UIImageview我的圆圈所在的方框,而不是UIImageview方框内的圆圈.
我能想到的解决方案是:
UIImageview圆形适合我的圆圈.UIImageviews.真的很感激帮助和想法.我是xcode的初学者.
谢谢!
当我尝试执行以下代码时,它给了我这个错误:
尝试索引字段'other'(零值)
但我不知道为什么.
代码:
function onCollision(event)
if event.phase == "began" then
if event.other.star == "star" then
score = score + 1
elseif event.other.mine1 == "mine1" then
if jet.collided == false then
timer.cancel(tmr)
jet.collided = true
jet.bodyType = "static"
explode()
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
提前致谢 :)