大佬教程收集整理的这篇文章主要介绍了c – 限制不同计算机上的游戏速度,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要它以便游戏在不同的计算机上以相同的速度运行,此时我的桌面上的游戏比我的笔记本电脑运行得更快(即我的播放器在我的桌面上移动得更快)
我被告知QueryPerformanceCounter()但我不知道如何使用它.
我该如何使用它还是有更好/更简单的方法?
void display() { static long timestamp = clock(); // First frame will have zero delta,but this is just an example. float delta = (float)(clock() - timestamp) / CLOCKS_PER_SEc; glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); createBACkground(); int curspeed = (player.getVeLocity()/player.getMaxSpeed())*100; glColor3f(1.0,0.0,0.0); glRasterPos2i(-screenWidth+20,screenHeight-50); glPrint("Speed: %i",curspeed); glRasterPos2i(screenWidth-200,screenHeight-50); glPrint("Lives: %i",lives); glRasterPos2i(screenWidth-800,screenHeight-50); glPrint("heading: %f",player.getheading()); for(int i = 0;i<90;i++){ if (numbullets[i].fireStatus == truE){ numbullets[i].updatePosition(player); if (numbullets[i].getXPos() > screenWidth || numbullets[i].getXPos() < -screenWidth || numbullets[i].getYPos() > screenHeight || numbullets[i].getYPos() < -screenHeight ){ numbullets[i].fireStatus = false; numbullets[i].reset(player); numbullets[i].~Bullet(); } } } player.updatePosition(playerTex,delta); glFlush(); timestamp = clock();
}
我的更新positiom方法
void Player::updatePosition(GLuint playerTex,float factor){ //draw triangle glPushMatrix(); glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glBindTexture(GL_TEXTURE_2D,playerTeX); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_replaCE); glTranslatef(factor*XPos,factor*YPos,0.0); glRotatef(heading,1); glColor3f(1.0,0.0); glBegin(GL_POLYGON); glTexCoord2f(0.0,1.0); glVertex2f(-40,40); glTexCoord2f(0.0,0.0); glVertex2f(-40,-40); glTexCoord2f(1.0,0.0); glVertex2f(40,1.0); glVertex2f(40,40); glEnd(); glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); glPopMatrix(); XPos += speed*cos((90+heading)*(PI/180.0f)); YPos += speed*sin((90+heading)*(PI/180.0f)); }
void main_loop() { static long timestamp = clock(); // First frame will have zero delta,but this is just an example. float delta = (float)(clock() - timestamp) / CLOCKS_PER_SEc; calculate_physics(delta); render(); timestamp = clock(); } void calculate_physics(float delta) { // Calculate expected displacement per second. applyDisplacement(displacement * delta); } void render() { // Do rendering. }
编辑:如果您想要更高的精度,您应该使用您的操作系统计时器功能.在Windows上,最精确的方法是使用QueryPerfoRMANceCounter().例
#include <windows.h> void main_loop(double delta) { // ... } int main() { LARGE_IntegeR freq,last,current; double delta; QueryPerfoRMANceFrequency(&freq); QueryPerfoRMANceCounter(&last); while (1) { QueryPerfoRMANceCounter(¤t); delta = (doublE)(current.QuadPart - last.QuadPart) / (doublE)freq.QuadPart; main_loop(delta); last = current; } }
以上是大佬教程为你收集整理的c – 限制不同计算机上的游戏速度全部内容,希望文章能够帮你解决c – 限制不同计算机上的游戏速度所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。