- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在为我的 GLUT 小行星游戏显示和动画多个小行星时遇到问题。我可以生成 1 ok,但是当我尝试添加更多时,输出不正确,createasteroid 不断被调用,并且出于某种原因只是在屏幕的不同部分闪烁小行星几毫秒。我相信这可能是因为当显示功能结束时对象被销毁但我无法找到解决方法到目前为止这是我的代码:
小行星.h
class asteroid
{
public:
asteroid(void); //constructer
~asteroid(void); //deconstructer
void createAsteroid();
float generateAsteroidLocation(float a, float b);
void animateAsteroid();
};
小行星.cpp
#include "asteroid.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include <ctime>
#include <GL/glut.h>
float asteroidX,asteroidY, V;
int numOfAsteroids=0;
asteroid::asteroid(void){
}
asteroid::~asteroid(void){
}
void asteroid::createAsteroid(){
// Translate to an area outside of the screen and then give a random velocity in the direction of the player
asteroidX = generateAsteroidLocation(0, 30);
asteroidY = generateAsteroidLocation(0, 30);
V = generateAsteroidLocation(0.000030, 0.000050);
printf("Asteroid Y Location %f \n", asteroidY);
printf("Asteroid X Location %f \n", asteroidX);
printf("Asteroid Velocity %f \n", V);
printf("Asteroid Created! \n");
glPushMatrix();
glTranslatef(asteroidX, asteroidY, 0.0);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_STRIP);
glVertex2f(1.0, 1.0);
glVertex2f(1.8, 0.0);
glVertex2f(1.4, -0.8);
glVertex2f(1.0, -1.7);
glVertex2f(-1.5, -1.0);
glVertex2f(-1.0, 0.0);
glVertex2f(0.0, 1.4);
glVertex2f(1.0, 1.0);
glEnd();
glPopMatrix();
}
float asteroid::generateAsteroidLocation(float a, float b){
float random = ((float) rand()) / (float) RAND_MAX;
float range = b - a;
return (random*range) + a;
}
void asteroid::animateAsteroid(){
float dt = 3500;
float Dx = 25 - asteroidX;
float Dy = 25 - asteroidY;
float Cx = asteroidX + Dx / sqrt(Dx*Dx+Dy*Dy) * V * dt;
float Cy = asteroidY + Dy / sqrt(Dx*Dx+Dy*Dy) * V * dt;
asteroidX = Cx;
asteroidY = Cy;
}
main.cpp(导致问题的函数)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include <ctime>
#include "asteroid.h"
#include <GL/glut.h>
asteroid a1;
asteroid a2;
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
// check to see if the player is ready, if not, show the splashscreen
if(ready == false){
splashScreen();
showText();
}
else{
createSpaceship();
// PROBLEM HERE
a1.createAsteroid();
a2.createAsteroid();
}
// Setup the scene
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 50, 0, 50, 0, 50);
// call the needed functions
glutSwapBuffers();
}
void idle(void)
{
glutPostWindowRedisplay(glutGetWindow());
// PROBLEM HERE
a1.animateAsteroid();
a2.animateAsteroid();
}
在这方面的任何帮助都会很棒。我对采取什么方法感到困惑。如果需要,我可以提供更多信息或 pastebin。谢谢! -丹
最佳答案
您只想将 createAsteroid
函数分成两部分,一个创建 Asteroid
,设置其初始值,另一个执行渲染。
你似乎有一个 ready
函数来知道加载何时完成,你应该在附近创建和初始化你的小行星。在显示中你应该调用一个只做这部分的函数:
glPushMatrix();
glTranslatef(asteroidX, asteroidY, 0.0);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINE_STRIP);
glVertex2f(1.0, 1.0);
glVertex2f(1.8, 0.0);
glVertex2f(1.4, -0.8);
glVertex2f(1.0, -1.7);
glVertex2f(-1.5, -1.0);
glVertex2f(-1.0, 0.0);
glVertex2f(0.0, 1.4);
glVertex2f(1.0, 1.0);
glEnd();
glPopMatrix();
此外,您似乎也在每次显示
时重新创建玩家的宇宙飞船,它应该像小行星一样只在初始化阶段创建!
编辑:如果我不清楚,在创建游戏对象时,您通常至少需要 4 个主要方法:Create/Init、Update(在这里您可以为您的对象设置动画,编写游戏代码,例如测试子弹命中等...)、渲染 和清理/销毁。坚持这一点应该真的可以帮助您继续游戏!
关于C++/过剩 : Generating multiple asteroids/bullets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13554679/
我正在用小行星做实验。 我的 html 看起来像: test var ceres = new Asteroid("localhost:3000"); var
题目地址:https://leetcode.com/problems/asteroid-collision/description/ 题目描述 Weare given an array aster
所以我有一个Java swing应用程序,其中有一艘宇宙飞船获取旋转角度,然后沿该方向加速(在其轴上旋转并移动到 scapy 所在的位置)。我遇到的麻烦是当船指向与之前方向相反的方向时让船减速。 Wh
我很难理解如何像在小行星克隆中那样移动我的宇宙飞船。当我旋转宇宙飞船时,我可以沿着世界 y 轴移动它,但不能在它自己的相对 y 轴内向前移动它。我已经评论了 if 语句用于飞船运动的代码。它位于 up
我有两个点 (x1, y1) 和 (x2,y2)它代表我空间中两个实体的位置。我使用毕达哥拉斯定理计算它们之间的欧几里得距离,一切都很好。但是,如果我的空间变得有限,我想在“环绕” map 接缝的点之
我正在尝试通过制作一个简单的小行星游戏来更多地了解 Java 中的 vector 和旋转。我一直在尝试 Vector2d 类,但我觉得我可以只使用 Points 和 doubles 来完成它。我对 V
我正在尝试在 JavaFX 中制作 Asteroids 游戏克隆。到目前为止,我已经能够将飞船和小行星绘制到屏幕上(目前用矩形代表它们)。我还实现了飞船的运动和小行星的随机运动。 我在实现小行星相互弹
我在为我的 GLUT 小行星游戏显示和动画多个小行星时遇到问题。我可以生成 1 ok,但是当我尝试添加更多时,输出不正确,createasteroid 不断被调用,并且出于某种原因只是在屏幕的不同部分
我正在为我的网络小行星游戏开发协议(protocol)。第一个版本将只允许每个玩家在一个滚动的世界中有一艘船射击对手。稍后我会添加岩石,很多岩石。 在 UDP 之上实现协议(protocol)似乎很重
我目前正在研究如何将 Meteor 与我自己的 Angular 项目结构和模板一起使用。有一个名为 Asteroid 的库(“用于 Meteor 后端的 javascript 客户端(浏览器和节点),
我正在寻找在 Parrot 上开发的解决方案设备。我对任何 SDK 或开发人员工具的存在感兴趣。我可以简单地将我的 Android 应用程序安装到设备上吗?我应该修改源代码以在 Parrot 设备上运
我是一名优秀的程序员,十分优秀!