游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4115|回复: 11

想问个dx编rpg游戏地图显示方面的问题,谢谢

[复制链接]

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
发表于 2005-2-16 21:27:00 | 显示全部楼层 |阅读模式
小地图的滚屏显示方法会一点点了,因为可以先把整张地图放入内存,处理比较简单;

如果是大地图,根据我自己的了解,如果滚屏显示的话,那么角色每走一步屏幕区域内的所有方格都要重新blt,是不是这样:
  SX,SY:屏幕左上角相对于大地图的坐标(以划分的方块为单位)

代码在下边2个帖子,gameres老是有问题,字数多的发不了帖子

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2005-2-16 21:27:00 | 显示全部楼层

Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

RECT rectScreen; //将小方块blt到屏幕的目标区域
LPDIRECTDRAWSURFACE7  lpDDSBack;//后台缓存;
LPDIRECTDRAWSURFACE7   lpDDSPic;//临时BMP离屏表面;
LONG Pic[j];//储存地图地形的二维数组;
LONG CharStep;//方块的长和宽,象素单位;

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2005-2-16 21:28:00 | 显示全部楼层

Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

rectScreen.left=0;
rectScreen.top=0;
rectScreen.right=CharStep;
rectScreen.bottom=CharStep;

for(int i=SY;i<SY+ScreenHSqu;i++)
{
  for(int j=SX;j<SX+ScreenWSqu;j++)
    {
        rectScreen.left+=CharStep;
        rectScreen.right+=CharStep;
        CreateBMPSurface(lpDDSPic,Pic[j]);
   lpDDSBack->Blt(&rectScreen,lpDDSPic,NULL,DDBLT_WAIT,DDBLTFAST_NOCOLORKEY);
    }
        rectScreen.left=0;
        rectScreen.top+=CharStep;
        rectScreen.right=CharStep;
        rectScreen.bottom+=CharStep;
}

然后角色每走一步,就要调用上边的整个过程;

可是我这样写了后调试,游戏的速度已经慢的没办法了。。。。请帮我指出我现在有哪些思维是错误的。。。。。感激不尽。

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-2-17 00:06:00 | 显示全部楼层

Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

问一下:
CreateBMPSurface(lpDDSPic,Pic[j]);
是干什么用的啊?

我想速度慢应该是处在它的身上,在两层for循环中调用的函数,稍微慢一点点,结果都会慢上ScreenHSqu*ScreenWSqu倍的!

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2005-2-17 04:37:00 | 显示全部楼层

Re: Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

[quote]
DreamSnow: Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

问一下:
CreateBMPSurface(lpDDSPic,Pic[j]);
是干什么用的啊?
[\quote]

就是Load bmp图像到离屏表面的。。

[em14]

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-2-17 13:49:00 | 显示全部楼层

Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

这个......好像不是这么用的!

BMP位图是在程序开始时一次性装入内存(离屏表面)的,你有100个位图,就开辟100个Surface,有1000个就开辟1000个。例如:
LPDIRECTDRAWSURFACE7   lpDDSPic[1000];

在游戏主循环中是用Blt()将各离屏表面的内容Blt到后备缓冲区的!并不是只用一个Surface,装入一个图片,Bit一个图片的。数据从硬盘到内存的拷贝速度是很慢...很慢的!所以要将图片全部装入内存,然后进行内存到内存的拷贝,这样速度就会很快了!

7

主题

188

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2005-2-17 14:40:00 | 显示全部楼层

Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

那就是说,每次loading之后都要把当前场景用到的图片都载入内存吗? 这样图片量会不会太大啊?如果是这样就要限制每个场景的的内存使用量了?那感觉还是内存不够用啊。。。。。迷惑ing

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2005-2-17 14:54:00 | 显示全部楼层

Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

如果地图很大怎么办?不可能全部装入内存啊

85

主题

824

帖子

878

积分

高级会员

Rank: 4

积分
878
QQ
发表于 2005-2-17 14:59:00 | 显示全部楼层

Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

不用担心不够用,系统会使用虚拟内存滴

25

主题

82

帖子

82

积分

注册会员

Rank: 2

积分
82
 楼主| 发表于 2005-2-17 15:17:00 | 显示全部楼层

Re:想问个dx编rpg游戏地图显示方面的问题,谢谢

我买那本参考资料上是这样的:

    先把整个场景装入内存,再BltFast到后台缓存,它是每次都把整个场景bltfast一遍,不在屏幕区域的图片的bltfast的坐标都为负,所以实际是利用bltfast在裁切,。。。。清华大学出版社的。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 09:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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