2D游戏的视角拉升 原理是咋样的 求思路?

目前的思路

  • 思路1_图片缩放: 将所有图片按比例缩放 能够实现效果  但也有缺点   图片不合并一起缩放 单个缩放会导致图片之间的位置 出现误差

 

  • 思路2_渲染器缩放: 将整个渲染器按比例缩放大小 效果也能 但是获取鼠标 不能超过屏幕分辨率上限 游戏缩小后鼠标也只能获取1920-1080的范围内(也就是可活动区域在左上角)  剩余的屏幕空间没法移动 除非鼠标能获取超过这个范围的坐标(尝试过累计鼠标xy坐标 但也只是移动了 1920-1080 这个移动框的位置 并不能超过获取)  但好像比例缩放之后 NPC的rect 也没有变化 一样跟按比例缩放前的碰撞一样  

 

  •  思路3_将多个纹理A画到一个纹理B当中  如果纹理B分辨率过高则 非常卡...

求想实现 图片1 的情况下 按比例缩放 而不像 图2 3那样缩放会有间距差    

目前思路1代码:   能实现放大 缩小效果  效果如图2 图 3  

 

  

back_rect.x =0; 
back_rect.y =0;	 

back_rect.w =5000  * 滑轮数值; 
back_rect.h =5000  * 滑轮数值;	 
 
NPCrect.x = 100; 
NPCrect.y = 100; 

NPCrect.w = 100  * 滑轮数值;  
NPCrect.h = 100  * 滑轮数值; 
 
NPCrect.y = NPCrect.y + back_rect.y - NPCrect.w * 滑轮数值 / 2; 
NPCrect.x = NPCrect.x + back_rect.x - NPCrect.w * 滑轮数值 / 2;

 
if (event.type == SDL_MOUSEWHEEL) {  
	if (event.wheel.y > 0) { 
		滑轮数值 += 0.11; 

	if (event.wheel.y < 0) { 
		滑轮数值 -= 0.11;


 


 


 

 

绘制的时候进行计算就行了

比如定义一个称摄像机对象,记录其位置和缩放,每次绘制地图和人物时用摄像机的数据计算出绘制在频幕上的位置和缩放