C++ SDL Movement 播放器"duplication"?
C++ SDL Movement Player "duplication"?
我是 SDL 的初学者,我只是在 SDL 中尝试移动精灵。我在屏幕底部有一个矩形,您可以左右移动。但是,当您左右移动精灵时,它会"复制",当您左右移动玩家时,会产生一种类似跟踪/贪吃蛇游戏的效果。关于如何解决这个问题的任何想法?
///the headers
#include "stdafx.h"
#include <SDL.h>
#include <SDL_image.h>
#include <string>
using namespace std;
//screen attributes
const int SCREEN_WIDTH = 800;
const int SCREEN_HEIGHT = 480;
const int SPRITE_SIZE = 32;
//the surfaces
SDL_Surface *image = NULL;
SDL_Surface *screen = NULL;
int main( int argc, char* argv[] )
{
SDL_Surface *screen, *temp,/* *temp2*/ *sprite/*, *sprite2*/;
SDL_Rect rcSprite/*, rcSprite2*/;
SDL_Event event;
Uint8 *keystate;
int gameover;
//initiailise sdl
SDL_Init(SDL_INIT_VIDEO);
SDL_WM_SetCaption("Pong Move Test", "Pong Move Test");
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0);
//load the sprite (paddle)
temp = SDL_LoadBMP("pongpaddle1.bmp");
sprite = SDL_DisplayFormat(temp);
SDL_FreeSurface(temp);
//set positions of sprite
rcSprite.x = 400;
rcSprite.y = 450;
gameover = 0;
//message pump
while (!gameover)
{
//look for an event
if (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
gameover = 1;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
case SDLK_q:
gameover = 1;
break;
}
break;
}
}
//handle sprite movement
keystate = SDL_GetKeyState(NULL);
if (keystate[SDLK_LEFT])
{
rcSprite.x -= 1;
}
if (keystate[SDLK_RIGHT])
{
rcSprite.x += 1;
}
//colide with edges of screen
if (rcSprite.x < 0)
{
rcSprite.x =0;
}
else if (rcSprite.x > (SCREEN_WIDTH - SPRITE_SIZE))
{
rcSprite.x = (SCREEN_WIDTH - SPRITE_SIZE);
}
//draw the sprite
SDL_BlitSurface(sprite, NULL, screen, &rcSprite);
//update the screen
SDL_UpdateRect(screen, 0, 0, 0, 0);
}
//clean up area
SDL_FreeSurface(sprite);
SDL_Quit();
return 0;
}
在绘制每一帧之前,您没有清除屏幕,因此您实际上是在前一帧上绘制,这就是您获得"尾随"效果的原因。
您可以通过在绘制每个帧之前使用SDL_FillRect
用背景色填充整个屏幕来解决此问题:
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0));
相关文章:
- SFML纹理像播放器
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 旋转播放器模型以指向一个点
- 播放器未在程序中的"X"和"O"之间切换
- DwmGetWindowAttribute 在全屏模式下无法获得媒体播放器的正确矩形大小
- 可以访问一个类中的播放器结构,但不能访问另一个类中的播放器结构
- C++ 播放器墙与 SFML 的冲突
- 如何在不显示媒体播放器的情况下在libVLC中拍摄快照
- OpenGL沿方向矢量移动播放器
- 如何将 cdparanoia 读取的 CD 音频数据移交给 ALSA 播放器?
- 我应该如何在文本RPG中调用播放器咒语
- 类模板"没有用于调用播放器的匹配函数::P layer()"
- 使用 Struct 进行 mp3 播放器模拟C++(不需要播放 mp3 的唯一显示列表)
- 如何修复结构播放器对象中的矢量位置,以便它在 Main 中与 me.position 一起使用?
- 将超能力高级音频播放器同步到绝对位置
- QT 5.8 WebEngine HTML 5视频播放器支持
- 克里昂未初始化记录类型:播放器
- 当磁盘几乎完整时,使用C 流式播放器复制Linux中的文件也不例外
- C++ SDL Movement 播放器"duplication"?