- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在玩 crafty js并用实体对象创建了 2D 自上而下的世界。
当任何固体物体发生碰撞事件时,我希望我的玩家不再能够朝所述物体的方向移动(因为有固体物体挡住了它的路径)。
我找到了一些 tutorials在线讨论了这个主题,但是他们调用的方法和函数被描述了。
.onHit("solid", function(from) {
console.log("ouch");
}
我可以在我的玩家撞到固体时记录碰撞,但我不知道如何停止运动。
我知道我可以为每次碰撞设置特定的解决方案(例如,顶部边框可以更新 y 以离开特定的顶部碰撞),但是我想要一个通用的方法,所以我的 Angular 色无法与任何固体结果发生碰撞移动。
当我尝试调用 from.x
时,我收到该元素是 undefined
,而 from.length
等其他元素可以正常工作,这对我来说没有意义。
或者提供一些兼容最新crafty的演示代码?
最佳答案
When I try to call
from.x
I receive that the element isundefined
, while other elements such asfrom.length
do work, which does not make sense to me.
onHit回调为您提供与 hit 相同的碰撞数据函数 - 一组碰撞结果。这就是您能够访问 length
属性的原因。
来自hit apidocs :
The returned collision data will be an Array of Objects with the type of collision used, the object collided and if the type used was SAT (a polygon was used as the hitbox) then an amount of overlap.
I know that I can setup specific solutions per collision (for example, a top border can update y to move off the specific top collision), however I want a generic approach so colliding with any solid results in my character not being able to move.
水平和/或垂直碰撞是我所知道的两个 axis-aligned bounding boxes 之间仅有的两种碰撞情况. AABB 在 Crafty 的碰撞检测中用作默认值(可以通过 .mbr() 访问)。
您提出的解决方案实际上是解决此类 AABB 冲突的常用解决方案。
使用箭头键或 WASD 移动绿色玩家。请注意黑色墙壁如何限制运动。
Crafty.init();
Crafty.e("2D, DOM, Color, Fourway, Collision, player")
.attr({x: 32, y: 32, w: 32, h: 32})
.color('green')
.fourway()
.bind('Moved', function(evt){
if (this.hit('solid'))
this[evt.axis] = evt.oldValue;
});
Crafty.e("2D, DOM, Color, solid, top")
.attr({x: 0, y: 0, w: 128, h: 1})
.color('black');
Crafty.e("2D, DOM, Color, solid, bottom")
.attr({x: 0, y: 127, w: 128, h: 1})
.color('black');
Crafty.e("2D, DOM, Color, solid, left")
.attr({x: 0, y: 0, w: 1, h: 128})
.color('black');
Crafty.e("2D, DOM, Color, solid, right")
.attr({x: 127, y: 0, w: 1, h: 128})
.color('black');
<script src="https://github.com/craftyjs/Crafty/releases/download/0.7.1/crafty-min.js"></script>
Crafty 中有一个更复杂和精确的碰撞检测变体,使用 seperate axis theorem ,适用于任意两个凸多边形之间。可以通过 .collision() 指定自定义多边形碰撞框。 .
类似的解决方案用于解决 SAT 碰撞 - 使用碰撞结果中的信息将碰撞对象移回。
使用箭头键或 WASD 移动绿色玩家。请注意如何沿红线限制移动,红线代表凸多边形碰撞框。
Crafty.init();
Crafty.e("2D, Fourway, Collision, DOM, Color, WiredHitBox, player")
.attr({x: 32, y: 32, w: 32, h: 32})
.collision([0, 16, 16, 0, 32, 16, 16, 32])
.color('green')
.fourway()
.bind('Moved', function(evt) {
var hitDatas, hitData;
if ((hitDatas = this.hit('solid'))) {
// resolving collision for just one collider here and assuming SAT collision
hitData = hitDatas[0];
this.x -= hitData.overlap * hitData.normal.x;
this.y -= hitData.overlap * hitData.normal.y;
}
});
Crafty.e("2D, Collision, DOM, Color, WiredHitBox, solid")
.attr({x: 64, y: 64, w: 64, h: 64})
.collision([0, 32, 32, 0, 64, 32, 32, 64])
.color('black');
<script src="https://github.com/craftyjs/Crafty/releases/download/0.7.1/crafty-min.js"></script>
请务必阅读 apidocs有关所用组件和事件的更多信息。
关于javascript - 狡猾的JS碰撞运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35755231/
我正在用 jQuery Collision 编写这个游戏,它使用键盘按键来移动 div,当一个 div 接触另一个 div 时,它应该防止重叠。 我到底该怎么做? HTML ----
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Java 2D Collision? 嘿,大家好,我有另一篇关于这个问题的帖子刚刚消失了,所以我想我会尝试得到一些关
嘿伙计们,我正在制作一个 2D java 游戏,我正在尝试找出如何制作一个好的碰撞代码。我目前正在使用以下代码: public void checkCollision() { Rect
我的意思是,当我与实体的侧面碰撞并想要跳跃时,我无法向右/向左移动,因为当我与右侧/左侧的实体碰撞时,我有一个标志可以防止这种情况发生,例如所以: 这是我用来检测碰撞的代码: public void
所以我正在运行 collide_mask 检查,以删除与玩家 Sprite 碰撞时的生物实例。它工作得很好。 pygame.sprite.spritecollide(player, mobs, Tru
我正在研究我的砖 block splinter 机,并制作一个适当的碰撞系统,以便使球逻辑地切换方向,我必须检测球与砖 block 的哪一侧碰撞。这是我当前的脚本: int sprite_collid
我做了一个类似颜色切换的游戏。唯一的问题是玩家与每种颜色发生碰撞...... 这是我从github上获取的代码: https://github.com/prometheon/MLNimbleNinja
测试我的游戏,当用户和怪物发生碰撞时,我希望弹出警报但没有成功: function die() { for (var i = 0; i < monster.length; i++) { i
我对 vector 很陌生,这是我第一次真正使用它们进行碰撞检查。这是我的项目,我对如何实现碰撞感到困惑。我目前的碰撞检查和响应代码似乎是……糟糕的设计。 这是我的代码: for(auto it =
我是 javascript 的新手,正在尝试找出如何与球和木板发生碰撞,这将停止游戏并提醒玩家“你输了”。但我只想让红球击中木板,让蓝球不接触地继续前进。这是我正在处理的代码。 (我不介意你是否可以帮
很抱歉提出奇怪的问题,我还是 Android 编程的新手。 我有以下代码: import android.content.DialogInterface.OnClickListener; import
我有 6 个 UIImageView,每个都连接到 UIPanGestureRecognizer,它们都连接到相同的方法。方法是: - (IBAction)handlePan:(UIPanGestur
我想根据某些对象的轴对齐边界框检查视锥体,以粗略检查这些对象是否在视野中。速度不是什么大问题。 最佳答案 我发现构建视锥体的世界空间模型并检查与它的 bbox 碰撞是错误的方法。 一个更简单的方法是以
我项目中的所有这些代码都运行良好,但我遇到了一些问题。当飞机接触到屏幕的边界时,它会在接触后开始旋转。我不知道如何让它在碰到屏幕边界时不旋转。只有在我使用时才会出现这个问题: plane.physic
在应用程序启动时,我在后台线程中删除旧的 CoreData 行,下面是我的代码。我的问题类似于城市街道问题。所以,我有两个实体,Street 和 City,我有一个关系 City > Street,因
我试图不接触穴居人和其他带有碰撞位掩码的图像,但我的穴居人击中了一切。 func addCaveManBitMasks(){ caveManNode.physicsBody?.category
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
如何在 PyGame 中找到字符和图像之间的碰撞?我已经从图像中绘制了一个玩家,并从瓷砖中绘制了墙壁,那么我如何检测这些碰撞? 最佳答案 如果你使用pygame Rect类来表示对象的边界,您可以使用
我正在使用 ftok() 为 C 应用程序使用的共享内存段生成标识符。我有问题,在一个盒子上我与 root 使用的标识符发生冲突。在这种情况下,我可以通过破解代码来修复它,但我想要一个更强大的解决方案
这个问题在这里已经有了答案: JavaScript: Collision detection (10 个回答) 10 个月前关闭。 检测 2 个物体(墙壁)碰撞的好方法。是的,不仅仅是检测,还有进一步
我是一名优秀的程序员,十分优秀!