gpt4 book ai didi

c++ - 在 SDL 2.0 C++ 中渲染 map

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:42 33 4
gpt4 key购买 nike

我有一个关于 SDL 2.0 和渲染的问题,我对 map 渲染的想法(2d 游戏,如 game boy 上的旧 zeldas 或 pokemon)是加载一个纹理来模拟内存中的 map (假设像 2000x2000),然后渲染相机所在的部分,但我的问题是:

我不能放任何 IMG,因为我需要 10 个 REP,抱歉。我试过了

这是代表的实际 map (只是我在 google 中获得的口袋妖怪 map ),这张 map 是 .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;
}

我的问题是:从 map 纹理我想像 map 的一部分一样绘制但尺寸较小并使其适合整个屏幕,即 800x553,我正在渲染 640,480,如果有人以 1024x740 播放将不会工作,就像 map 上的城市之一,但只有城市适合整个屏幕。

谢谢

最佳答案

如果目标的宽度和高度与源不匹配,SDL 将缩放您的纹理。

例如,假设您有一个 50x50 的 Sprite 并执行如下操作:

SDL_Rect src;
src.x = 0
src.y = 0;
src.w = 50;
src.h = 50;

SDL_Rect dst;
dst.x = 0;
dst.y = 0;
dst.w = 100;
dst.h = 100;

SDL_RenderCopy(renderer, mySprite, &src, &dst);

你的 Sprite 将被渲染成两倍大,因为目标宽度和高度是源的两倍。

对于您的情况,如果您只想显示 map 的 640x480 部分并将其拉伸(stretch)以适合窗口,则只需将源设置为 640x480,将目标设置为窗口大小即可。

用于确保所有内容都以相同方式缩放的一个常用技巧是使用游戏渲染到的“相机”分辨率(即 640x480)而不是窗口的纹理。一旦它将整个帧渲染到纹理,纹理就会渲染到窗口并缩放到正确的大小。

关于c++ - 在 SDL 2.0 C++ 中渲染 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22031056/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com