游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3385|回复: 8

基于像素的地图卷动

[复制链接]

2

主题

6

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2007-2-10 15:54:00 | 显示全部楼层 |阅读模式
首先,我要的是可以基于像素的卷动效果,所以直接使用和屏幕相同大小的surface是不可能实现的,那么必然得用一块比屏幕宽度宽2个tile宽的surface,至于为什么这样做我会在后面讲到。然后先看看我的想法:

先不考虑游戏中任何精灵,我们先考虑只是背景卷动的情景,在这之前我得说说两类坐标,一个是世界坐标,一个是屏幕坐标:

世界坐标:world_x , world_y;
屏幕坐标:scroll_x, scroll_y;

会变化的只有屏幕坐标,游戏的渲染也是根据屏幕坐标来进行的,世界坐标起什么作用呢?我只会用它的数据来做碰撞检测!游戏开始的时候,世界坐标和屏幕坐标都为0。

//判断卷轴是否卷动
if (press(left) && (scroll_x > world_x) )
{
//进行越界判断
scroll_x -= scroll_dx;
if(scroll_x<=world_x)
{
   scroll_x = world_x;
}

}

else

if(press(right) && (scroll_x < world_x + world_width) )
{
scroll_x+= scroll_dx;
if(scroll_x > world_x + world_width - scroll_width)
{
   scroll_x =  world_x + world_width - scroll_width;
}
}

//渲染画面

首先得分配一个页面,取名为:clever_surface; 譬如,屏幕大小为640 * 480, 那么这个页面的大小就应该是:
(640+tile_width) * 480;
现在我可以解释为什么会用到这个技巧:
因为游戏中的地图数据是2维数组的形式: map[MAP_HEIGHT][MAP_WIDTH];
所以我贴图也只能是tile的方式,设想一种情况,屏幕的左端只看见一个砖块的一半因该怎么贴?很显然,直接往屏幕上贴图是不现实的。。所以我分配了一个比屏幕宽1个tile 宽度的surface,目的就在于先把完整的tile贴好,然后再把真正应该显示到屏幕上的surface rect复制到屏幕上。

posx_in_map = scroll_x/TILE_WIDTH ;   


裁减量:
clip_x = scroll_x - posx_in_map *TILE_WIDHT;  //you should use this when you clip surface.
  
for(int j = 0; j <= 14; j++)
for(int i = posx_in_map; i <= posx_in_map + 20; i++)
{
  switch(tile.style)
{
  case BLOCK:
       blit tile(0,0) to clever_surface();
        break;
      //and other case.
}

}


那么剩下的就简单了。。
把这个clever_surface的rect(clip_x,0,640,480) 贴到屏幕surface的rect(0,0,640,480)就ok

12

主题

93

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2007-2-10 23:03:00 | 显示全部楼层

Re:基于像素的地图卷动

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2007-2-11 16:46:00 | 显示全部楼层

Re:基于像素的地图卷动

-----------------------------------------------------------------------------------------------

8

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2007-2-12 15:56:00 | 显示全部楼层

Re:基于像素的地图卷动

创建一个剪裁器,然后直接把大图往屏幕上贴(坐标可以是负数)
不知道能不能满足楼主的要求

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2007-2-12 16:06:00 | 显示全部楼层

Re:基于像素的地图卷动

。。。。。。。。。。。。。。

38

主题

275

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2007-3-18 22:12:00 | 显示全部楼层

Re:基于像素的地图卷动

how to use this library ?
how to use this api ?
how to use this ide ?
how to use ......
but where are these discussions ?
how to make this type game ?
so i think dophi is correct ...

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-3-18 23:10:00 | 显示全部楼层

Re: 基于像素的地图卷动

汗,好怀旧的帖子,还以为回到了多年前…… [em10]

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2007-3-24 17:07:00 | 显示全部楼层

Re:基于像素的地图卷动

我的MAP就是这样做的,UP一个

2

主题

129

帖子

135

积分

注册会员

Rank: 2

积分
135
发表于 2007-3-25 16:29:00 | 显示全部楼层

Re:基于像素的地图卷动

.............
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 19:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表