【发布时间】:2014-02-26 03:22:55
【问题描述】:
我有一个关于 SDL 2.0 和渲染的问题,我对地图渲染的想法(像老 zeldas 或游戏男孩上的口袋妖怪这样的 2d 游戏)是在内存中加载一个纹理来模拟地图(假设像 2000x2000),然后渲染相机所在的部分,但我的问题是:
我不能放任何 IMG,因为我需要 10 个 REP,抱歉。我试过了
这是实际显示的地图(只是我在 google 中获得的口袋妖怪地图),此地图为 .bmp,大小为 = 800x553。
这是我正在使用的相机代码(.cpp):
CCamera CCamera::CameraControl;
CCamera::CCamera() {
X = Y = 0;
TargetX = TargetY = NULL;
TargetMode = TARGET_MODE_NORMAL;
}
void CCamera::OnMove(int MoveX, int MoveY) {
X += MoveX;
Y += MoveY;
}
int CCamera::GetX() {
int WWIDTH=640;
if(TargetX != NULL) {
if(TargetMode == TARGET_MODE_CENTER) {
return *TargetX - (WWIDTH / 2);
}
return *TargetX;
}
return X;
}
int CCamera::GetY() {
int WHEIGHT=480; //Ver guia tutorial "SDL MAPAS", El creo un define.h el cual traia unos defaults
if(TargetY != NULL) {
if(TargetMode == TARGET_MODE_CENTER) {
return *TargetY - (WHEIGHT / 2);
}
return *TargetY;
}
return Y;
}
void CCamera::SetPos(int X, int Y) {
this->X = X;
this->Y = Y;
}
void CCamera::SetTarget(int* X, int* Y) {
TargetX = X;
TargetY = Y;
}
这是绘制到屏幕的代码(.cpp):
bool Texture::OnDraw(SDL_Renderer * Render, SDL_Texture * Texture_Dest, int X, int Y,int X2, int Y2,int W, int H){
if (Render==NULL || Texture_Dest == NULL ){printf("No se pudo dibujar ya que El renderer o el destino o la fuente estaba vacio"); return false;}
SDL_Rect DestR;
DestR.x = X;
DestR.y = Y;
DestR.w = W;
DestR.h = H;
SDL_Rect SrcR;
SrcR.x = X2;
SrcR.y = Y2;
SrcR.w = W;
SrcR.h = H;
SDL_RenderCopy(Render,Texture_Dest,&SrcR,&DestR);
return true;
}
我的问题是:从地图纹理中,我想像地图的一部分一样绘制,但尺寸很小,并使其适合整个屏幕,即 800x553,如果有人以 1024x740 播放,我会重新绘制 640,480工作,就像地图上的城市之一,但只有城市适合整个屏幕。
谢谢
【问题讨论】: