二维游戏的一些tips

滚动地图的算法实现

	变量设置:
	playerx, playery 为人物相对于完整地图左上角的坐标;
	screen_wide, screen_high 为屏幕的宽和高;
	xtile为屏幕上x轴上可显示的小地图个数;
	ytile为屏幕上y轴上可显示的小地图个数;
	tileplayerx = playerx / tile_wide 为人物所在格x轴下标;
	tileplayery = playery / tile_high 为人物所在格y轴下标;
	
	应该绘制的地图范围是:
	x轴: 由 tileplayerx - xtile/2 至 tileplayerx + xtile/2;
	y轴: 由 tileplayery - ytile/2 至 tileplayery + ytile/2;
	当人物在屏幕正中央时,地图到屏幕的位置变化公式为:
	screenx = xi * tile_wide – playerx + 0.5 * screen_wide
	screeny = yi * tile_high – playery + 0.5 * screen_high

	int beginx = tileplayerx - xtile/2
	int endx = tileplayerx + xtile/2
	int beginy = tileplayery - ytile/2
	int endy = tileplayery + ytile/2
	tileplayerx = playerx / tile_wide
      tileplayery = playery / tile_high
	for (yi = beginy; yi<endy; yi++){
		for(xi = beginx; xi<endx; xi++){
		  int screenx = xi * tile_wide – playerx + 0.5 * screen_wide; 
								//屏幕上位置
		  int screeny = yi * tile_high – playery + 0.5 * screen_high;
        int tileid = mapping_matrix[yi][xi]; 		//地图数据数组
		  blit(tillid,screenx,screeny); //自编函数,将相应地图贴到正确位置
		}
	}

多层次地图

将地图数据改为三维数组 第三维用来表示当前是第几张地图
不同地图里的物体移动速度不相同可以模拟远近景真实感

菱形地图

二维表示三维常用方法

int MapDraw(HDC hdc){
	int i,j;
	int lim=MAXSCREENX/TILEWIDE;  //所需绘制地图的范围
	for (i=-lim; i<lim; i++){
		for (j=-lim; j<lim; j++){
			int sx=MAXSCREENX/2-(TILEWIDE/2)+(i*TILEWIDE/2)-(j*TILEWIDE/2);
			int sy=MAXSCREENY/2-(TILEHIGH/2)+(i*TILEHIGH/2)+(j*TILEHIGH/2);
			if((sx<MAXSCREENX) && (sy<MAXSCREENY) && (sx+TILEWIDE>0) 
			&& (sy+TILEHIGH>0) && (playerx+i<100 && playerx+i>=0) 
			&& (playery+j<100 && playery+j>=0) ){	//边界判断
			TransparentBlt(hdcMem,sx,sy,TILEWIDE,TILEHIGH,
			hdcTiles[Data[playerx+i][playery+j]],
			0,0,TILEWIDE,TILEHIGH,RGB(0,255,0)); //贴图
			}
		}
	}
	BitBlt(hdc,0,0,MAXSCREENX,MAXSCREENY,hdcMem,0,0,SRCCOPY);//画到窗口
return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值