我正在为课程做一个编程项目.我们正在编制游戏突破,包括一个球,一个球拍,四个边缘和砖块.当检测到碰撞时,球从不同的物体上反弹并且每个物体在其自身上预先形成不同的操作.下面是我的代码,目前无法正常工作.我正在尝试使用对象的位置(它的中心点)来构造一个有界框和每个边(顶部,底部,左边,右边)的值来计算框是否命中.我在脑海中想到,可能有两种类型的碰撞,一种是角落撞击,另一种是一种物体碰到另一种物体中间的某处.如果可以,请查看我的代码并提供帮助.我不知道是否有更好的方法来做我正在尝试做的事情,但我目前无法正常工作并且几乎一直都会返回真值.
这是代码的一部分,它检查每个能够与可能发生碰撞的其他对象发生冲突的对象.它还会移动每个对象并勾选游戏的时钟.
/**
* Tell the GameWorld that the "game clock" has ticked. A clock tick in the GameWorld has the
* following effects: (1) all movable objects are told to update their positions according to there
* current heading and speed, (2) the "elapsed game time" is incremented by one and (3) all Items are
* checked for a collision.
*/
public void tickClock() {
gameClock++;
Iterator theElements0 = listOfGameObjects.getIterator();
while (theElements0.hasNext()){
GameObject gObj = (GameObject) theElements0.getNext();
if ( …Run Code Online (Sandbox Code Playgroud) 在多次看到这个问题并用旧的(且不可用的)代码回复后,我决定重做所有内容并发布有关它的信息。
矩形的定义如下:
center:x以及y他的位置(记住 0;0 是左上,所以 Y 向下)size:x以及y他的尺寸angle其旋转(以度为单位,0 度是沿着 OX 轴并顺时针旋转)目标是知道两个矩形是否发生碰撞。
生成彼此不重叠的2D小行星(自上而下)的好方法是什么?如果您能提供类似于C#或JAVA的任何语言的代码,我会感激不尽.
今天是个好日子!
我想intersect在Google表格脚本中使用与VBA类似的功能.有一个很好的方法来做到这一点?该函数必须返回:
RangeIntersect(R1, R2) = true 如果R1与R2有共同的细胞,RangeIntersect(R1, R2) = false 如果R1没有与R2共同的单元格先感谢您.
速度测试
我希望功能尽可能快地运行.那是因为它将在onEdit函数内部的循环中使用.如果您愿意,可以使用此脚本测试提供的功能:
function speedtest () {
var sheet;
sheet = SpreadsheetApp.getActiveSheet();
var rr1 = ['A1:C16', 'B2:B88', 'D1:D8', 'E1:E17', 'A18:B51', 'A13:A14', 'A17:C17'];
var r1, r2;
r1 = sheet.getRange(rr1[0]);
var rr2 = [];
// define some ranges
for (var x = 0; x < 30; x++) {
for (var i = 0; i < rr1.length; i++) {
r2 = sheet.getRange(rr1[i]);
rr2.push(r2);
}
} …Run Code Online (Sandbox Code Playgroud) 让我们说我有两个正方形,我知道他们的位置,红色和蓝色方块:
redTopX;
redTopY;
redBotX;
redBotY;
blueTopX;
blueTopY;
blueBotX;
blueBotY;
Run Code Online (Sandbox Code Playgroud)
现在,我想检查方形蓝色是否位于(或部分)方形红色内(部分).这可能发生在很多情况下,正如您在我创建的图像中看到的那样,可以更好地说明我的情况: 替代文字http://www.feedpostal.com/etc/ranges.gif
请注意,总是只有一个蓝色和一个红色方块,我只是添加了多个,所以我不需要重绘18次.
我原来的逻辑很简单,我检查方形蓝色的所有角落,看看它们是否在方形红色内:
if (
((redTopX >= blueTopX) && (redTopY >= blueTopY) && (redTopX <= blueBotX) && (redTopY <= blueBotY)) || //top left
((redBotX >= blueTopX) && (redTopY >= blueTopY) && (redBotX <= blueBotX) && (redTopY <= blueBotY)) || //top right
((redTopX >= blueTopX) && (redBotY >= blueTopY) && (redTopX <= blueBotX) && (redBotY <= blueBotY)) || //bottom left
((redBotX >= blueTopX) && (redBotY >= blueTopY) && (redBotX <= blueBotX) …Run Code Online (Sandbox Code Playgroud) 我想检查两个正方形是否相互交叉。我的想法是这个
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++) {
bool x = check line(i) of first square intersect with
line (j) of the second square
if (x) return;
}
Run Code Online (Sandbox Code Playgroud)
任何想法优化此代码?
java ×2
javascript ×2
math ×2
2d ×1
algorithm ×1
bounding-box ×1
c# ×1
c++ ×1
comparison ×1
geometry ×1
rectangles ×1
tree ×1
vector ×1