- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
编辑:原来我只是有一些值 -switched-。
我在我的 Windows 计算机上使用 OpenGL 并使用 C 编写代码,我正在尝试进行非常非常基本的碰撞检测。现在,我正在尝试查看点 Ox,Oz 是否在两个框内:
int collision(int box[2][4]) {
int col;
int i;
for (i=0;i<2;i++){
col = 0;
printf("x1:%.0f y1:%.0f x2:%.0f y2:%.0f \n",colbox[i][0],colbox[i][1],colbox[i][2],colbox[i][3]);
printf("Ox:%.1f Oy:%.1f Oz:%.1f \n" , Ox,here,Oz);
if ((colbox[i][0] < Ox) && (Ox < colbox[i][2])&& (colbox[i][1] < Oz) && (colbox[i][3] > Oz))
return 1;
else
return 0;
}
}
我也尝试过变体,比如没有任何东西传递给函数,将循环放在函数之外等等。问题似乎出在相等性检查上?
我正在尝试做的最底层是查看一个点(相机)是否在边界内(这是一组保存在二维数组中的 4 个点),以及它是否在边界内-列出的任何边界,返回 1。如果该点不在任何边界内,则返回 0。
当它起作用时,它只对一个区域起作用,即如果我移动到第一个列出的边界区域,它会正确返回,但第二个区域不会正确返回。
完整代码如果真的有用的话:
// Values
double Ox=0, Oz=0;
float Oy=1.0;
double asp=1; // Aspect ratio
double dim=20; // Size of world
double fov=55; // Field of View
double ph,th = 0;
// angle of rotation for the camera direction
float angle = 0.0;
// actual vector representing the camera's direction
float lx=0.0,lz=-1.0;
// the key states. These variables will be zero
//when no key is being presses
float deltaAngle = 0.0;
float deltaMove = 0;
double here;
int collide;
// {x1,y1,x2,y2}
double colbox[2][4] = {
{3,3,6,6},
{-1,-14,-3,-16}
};
//front-1 back-2 left-3 right-4
int collision(double box[2][4]) {
int i;
for (i=0;i<2;i++){
col = 0;
printf("x1:%.0f y1:%.0f x2:%.0f y2:%.0f \n",colbox[i][0],colbox[i][1],colbox[i][2],colbox[i][3]);
printf("Ox:%.1f Oy:%.1f Oz:%.1f \n" , Ox,here,Oz);
if ((colbox[i][0] < Ox) && (Ox < colbox[i][2])&& (colbox[i][1] < Oz) && (colbox[i][3] > Oz))
return 1;
else
return 0;
}
}
//test
static void ball(double x,double y,double z,double r)
{
// Save transformation
glPushMatrix();
// Offset, scale and rotate
glTranslated(x,y,z);
glScaled(r,r,r);
// White ball
glColor3f(1,1,1);
glutSolidSphere(1.0,16,16);
// Undo transofrmations
glPopMatrix();
}
static void square(double r) {
glPushMatrix();
glScaled(r,r,r);
glColor3f(1,0,0);
glBegin(GL_QUADS);
glVertex3f(-1,0,-1);
glVertex3f(1,0,-1);
glVertex3f(1,0,1);
glVertex3f(-1,0,1);
glEnd();
glPopMatrix();
}
//test
void computePos(float deltaMove) {
Ox += deltaMove * lx * 0.1f;
Oz += deltaMove * lz * 0.1f;
}
void computeDir(float deltaAngle) {
angle += deltaAngle;
lx = sin(angle);
lz = -cos(angle);
}
// display
void display() {
here = 2.0f*Oy;
if (deltaMove)
computePos(deltaMove);
if (deltaAngle)
computeDir(deltaAngle);
const double len=2.0;
// Erase the window and the depth buffer
glClearColor(0.3,0.5,1.0,1);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
// Enable Z-buffering in OpenGL
glEnable(GL_DEPTH_TEST);
// Set perspective
glLoadIdentity();
gluLookAt(Ox,2,Oz, Ox+lx, here, Oz+lz, 0,1,0);
ball(5,5,5,2); ball(-2,0,-15,1);
square(15);
glColor3f(1,1,1);
glBegin(GL_LINES);
glVertex3d(0.0,0.0,0.0);
glVertex3d(len,0.0,0.0);
glVertex3d(0.0,0.0,0.0);
glVertex3d(0.0,len,0.0);
glVertex3d(0.0,0.0,0.0);
glVertex3d(0.0,0.0,len);
glEnd();
// Label axes
glRasterPos3d(len,0.0,0.0);
Print("X");
glRasterPos3d(0.0,len,0.0);
Print("Y");
glRasterPos3d(0.0,0.0,len);
Print("Z");
// Render the scene and make it visible
glColor3f(0,0,0);
glWindowPos2i(5,5);
Print("Ox:%.1f Oy:%.1f Oz:%.1f lx:%.1f lz:%.1f Collide:%d", Ox,here,Oz,lx,lz,collide);
ErrCheck("display");
glFlush();
glutSwapBuffers();
}
void key(unsigned char ch,int x,int y) {
// Exit on ESC
if (ch == 27)
exit(0);
// WASD controls
else if (ch == 'a' || ch == 'A')
deltaAngle = -0.05;
else if (ch == 'd' || ch == 'D')
deltaAngle = 0.05;
else if (ch == 'w' || ch == 'W') {
collide=collision(colbox);
deltaMove = 1; }
else if (ch == 's' || ch == 'S') {
collide=collision(colbox);
deltaMove = -1; }
else if ((ch == 'e' || ch == 'E') && here < 4)
Oy += 0.01;
else if ((ch == 'c' || ch == 'C') && here > .5)
Oy -= 0.01;
Project(fov,asp,dim);
glutPostRedisplay();
}
void reshape(int width,int height) {
// Ratio of the width to the height of the window
asp = (height>0) ? (double)width/height : 1;
// Set the viewport to the entire window
glViewport(0,0, width,height);
// Set projection
Project(fov,asp,dim);
}
void releaseKey(unsigned char ch, int x, int y) {
if (ch == 'a' || ch == 'A')
deltaAngle = 0;
else if (ch == 'd' || ch == 'D')
deltaAngle = 0;
else if (ch == 'w' || ch == 'W')
deltaMove = 0;
else if (ch == 's' || ch == 'S')
deltaMove = 0;
Project(fov,asp,dim);
glutPostRedisplay();
}
int main(int argc,char* argv[]) {
// Initialize GLUT
glutInit(&argc,argv);
// Request double buffered, true color window with Z buffering at 600x600
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(800,500);
glutCreateWindow("Haunted House");
// Set callbacks
glutDisplayFunc(display);
glutReshapeFunc(reshape);
// glutSpecialFunc(special);
glutKeyboardFunc(key);
glutKeyboardUpFunc(releaseKey);
// Pass control to GLUT so it can interact with the user
ErrCheck("init");
glutMainLoop();
return 0;
}
最佳答案
我认为当 i=1 第二行时
if ((colbox[i+1][0] < Ox) && (Ox < colbox[i+1][2])&& (colbox[i+1][1] < Oz) && (colbox[i+1][3] > Oz))
离开大小为 2 的数组。(因为它的最大索引为 1。)
所以,假设它正在读取不在数组内的内存(我认为通常没问题)你会发现条件可能会失败很多,甚至可能是大部分时间,因为它正在使用本质上是随机数据。所以它然后返回 0。
关于c - 简单的碰撞检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251881/
我正在用 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 个物体(墙壁)碰撞的好方法。是的,不仅仅是检测,还有进一步
我是一名优秀的程序员,十分优秀!