- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我会尽快保持这一点。
只需编写一个处理程序,使球从矩形反弹。
目前我只能弄清楚如何做顶部、左侧、右侧和底部,但是当球进入矩形的角落时,它不会反弹,而是进入矩形并在 1 之后或 2 个反弹被释放。
我只是真的想知道我应该如何让球偏离矩形的角,这样它就不会出现故障
这是我的代码:
float x = 100, y = 100, radius = 50;
float vx = 3, vy = 3;
float MX = 0;
float MY = 0;
void setup() {
size(500, 700);
}
void draw() {
background(0);
fill(255);
x += vx;
y += vy;
if (x + radius > width) {
vx = vx * -1;
}
//makes the ball bounce off the right
if (x - radius < 0) {
vx = vx * -1;
}
//makes the ball bounce off the left
if (y + radius > height) {
vy = vy * -1;
y = height - radius;
}
//make the ball bounce off the top
if (y - radius < 0) {
vy = vy * -1;
y = radius;
}
//makes the ball bounce off the top
if (y + radius > MY && x + radius > MX + 50 && x + radius < MX + 150 &&
y + radius < MY + 20) {
vy *= -1;
y = MY - 3 - radius;
} //Top Side
if (x - radius < MX + 100 && y > MY - 10 && y < MY + 10 && x - radius > MX) {
vx *= -1;
} // Right Side
if (y - radius < MY + 20 && x + radius > MX + 50 && x + radius < MX + 150 &&
y - radius > MY) {
vy *= -1;
y = MY + 20 + radius;
} //Bottom Side
if (x + radius > MX && y > MY - 10 && y < MY + 10 && x + radius < MX + 100) {
vx *= -1;
} // Left Side
ellipse(x, y, radius * 2, radius * 2);
rect(MX, MY, 100, 20);
}
void mouseMoved() {
MX = mouseX - 50;
MY = mouseY - 10;
if (MX < 0) {
MX = 0;
}
if (MX > 400) {
MX = 400;
}
if (MY < 0) {
MY = 0;
}
if (MY > 680) {
MY = 680;
}
抱歉,我很清楚如何插入代码,我是这个网站的新手,请怜悯哈哈:)
干杯
最佳答案
问题不在于您需要检测角点碰撞。您还有另外两个问题:
问题 1:当您检测到碰撞时,您需要移动球,使其不再与矩形碰撞。
如果不这样做,那么当球与盒子顶部相交时,您将 vy
变量乘以 -1
。这导致圆圈开始向上移动。但下一帧,圆圈仍然与矩形碰撞,因为它还没有向上移动足够的距离。因此,您的代码检测到该碰撞,再次将 vy
乘以 -1
,然后球向下移动。下一帧会发生同样的事情,直到球最终停止与矩形碰撞。
放慢帧速率看看我在说什么:
要解决此问题,您需要将球“弹出”回不再与矩形相交的位置。这样你就知道它在下一帧中不会仍然发生碰撞。
问题 2:您不应该分别在每一侧进行碰撞。相反,在整个圆和整个矩形之间进行碰撞,然后一次检查一个移动轴。
一次检查一侧会导致很多令人头痛的问题,包括同时击中多侧的问题。我还敢打赌,您的代码没有按照您的想法进行操作:尝试将 println()
语句添加到所有 if
语句中,以确保它们正在执行当你认为他们是的时候。
为了解决这个问题,我将创建一个 collides()
函数,该函数获取球的下一个位置的参数,并返回球是否会与矩形的任意边。然后进入下一个 X 和 Y 位置并翻转它们的速度。它看起来像这样:
if (collides(circleX + vx, circleY)) {
vx*=-1;
}
else {
circleX += vx;
}
if (collides(circleX, circleY + vy)) {
vy*=-1;
}
else {
circleY += vy;
}
您还需要添加“弹出”球的逻辑,使其不再发生碰撞。
PS:您是否尝试在 google 或 Stack Overflow 搜索上搜索您的问题? This question几乎与您的问题完全相同,以至于我很确定您在同一类!
关于java - 如何使圆反弹矩形的角 - 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38611704/
如果停止 ScrollView 中两个元素之间的滚动,是否有办法使 ScrollView 弹起并稳定? 最佳答案 是的,它叫做Pagination,您基本上需要设置contentSize,然后在中设置
我有一个 UIImageView,它应该从顶部滑入 View ,然后当它停止时它应该制作一个弹跳动画。 我正在像这样设置 y.position 变化的动画: [UIView animateW
我在 java android studio 中使用 libgdx。我才刚刚开始。我正在使用安卓手机。我没有使用任何相机。我想要的只是屏幕所有四个边的 Sprite 反弹而无需点击。我尝试了很多我认为
文本以编程方式添加到 UILabel。随着添加更多文本,文本换行并增加标签的高度。 问题是,当文本在一行的末尾换行时,整个标签将跳起 1 行的高度并自行动画回到正确的位置。最终结果很好,但是你如何摆脱
从 iPhone 上的 UIAlertView 模仿弹跳动画的最佳方法是什么?是否有一些内置机制? UIAlertView 本身不能满足我的需要。 我研究了动画曲线,但据我所知,它们提供的唯一曲线是缓
为此搜索了很多,但还没有找到合适的解决方案。 是否可以禁用 UIPageViewController 的反弹效果并仍然使用 UIPageViewControllerTransitionStyleScr
我有一个 ScrollView ,它充当横幅,其中有 15 个 ImageView 作为 subview (水平滚动)。我这样添加 subview : for (int i = 0; i < feat
我希望如果用户滑动的宽度小于按钮宽度的一半,那么它会弹回并且不显示任何按钮,但是如果用户滑动的宽度超过按钮宽度的一半,那么单元格就会弹回正确的位置。 这就是我目前所拥有的,可以左右滑动。 privat
我使用 jQuery Waypoints 库将菜单栏容器的位置从静态修改为固定。当浏览器窗口向下滚动到菜单栏时,该栏固定在窗口的顶部。 当缓慢滚动到/经过航路点时,状态变化似乎很顺利,但当我以正常速度
我在 xib 中为我的 customCell 使用 autoLayout,因为我想根据文本为行设置可变高度。 现在在我的 VC.m 中 我正在使用这些代码行 - (void)viewdidLoad {
我已经尝试了很多方法来解决这个问题,浪费了整整一周,没有解决。 我有两个 AWS 账户。一个帐户有 example.com 通过 SMTP 发送 SES 电子邮件。原始 mime 文件包括来源:bou
我希望让球的弹跳变得逼真。有时它会反弹,顶点会开始下降,然后再次撞击地面并反弹得更高。当它撞到墙壁时也会发生同样的情况,就好像墙壁违背我的意愿对球施加了一个力(除了 y 方向默认设置为 9.8 的重力
正在寻求有关如何创建执行弹跳的自定义 SKAction( Sprite 套件)的帮助? 基本上,想要将 Sprite 从顶部屏幕拖放到底部(Y 轴)并让它执行快速衰减反弹(仅在 Y 轴上下)。 注意:
我是 Core Animation 的新手,也是 RubyMotion 的新手(自 1 月以来一直在 Xcode 中使用 Obj-C)。我需要 AppLabel(它的 png 在名为 AppAppea
我正在尝试将 vector 拆分为 n 个部分。我检查了以下解决方案 How to split a vector into n "almost equal" parts 我根据这个评论得出了以下代码:
我是一名优秀的程序员,十分优秀!