游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4337|回复: 10

请教一个画地图的问题

[复制链接]

5

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-10-1 12:30:00 | 显示全部楼层 |阅读模式
我用的是矩形的Tile,总大小是256×256。每张位图上有8×8个Tile。
所以每个tile应该是32×32。对吧?
页面的大小是800×600。(后备缓冲 )
所以每个页面应该画25×18.75个tile。

int DrawMap()
{
        memset(&ddbltfx,0,sizeof(ddbltfx));
        ddbltfx.dwSize=sizeof(ddbltfx);
               //rect.left=x1;rect.top=y1;rect.right=x2;rect.bottom=y2
        int x1=0,y1=0,x2=31,y2=31;
        for(int x=0;x<25;x++)
        {
                                //归零。从第一列继续画
                y1=0;
                y2=31;

                for(int y=0;y<18;y++)
                {
                                //把离屏表面的tile  blt()到后备缓冲
                SurfaceToBack(map1s,0,0,31,31,lpddsback,x1,y1,x2,y2);
                                //maps1是离屏表面。在这仅读取第一个tile
                y1=y1+32;
                y2=y2+32;
                }
                x1=x1+32;
                x2=x2+32;
        }
        return 1;
}

问题是:
按以上的程序画后备缓冲后,得到的是每个tile后面和下面有1个象素的空隙。若是改成
        int x1=0,y1=0,x2=31,y2=31;
则画出来刚好。不知道是那里计算出了错?

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-10-1 12:47:00 | 显示全部楼层

Re:请教一个画地图的问题

兄台,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 不刚好32个数吗?小学知识(确切是幼儿园的知识)!

5

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-10-2 09:23:00 | 显示全部楼层

Re:请教一个画地图的问题

对不起,我的表达有误。

我的意思是说如果初始值用
int x1=0,y1=0,x2=31,y2=31;
画出来后在每个tile之间会有1个象素的间隔

若是初始值改成int x1=0,y1=0,x2=32,y2=32;
则画出来却没有那1个象素的间隔了(但是这样计算的值多了1个象素)

问题是:后面种计算方法有错怎会得出正确得结果。

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-10-2 12:12:00 | 显示全部楼层

Re:请教一个画地图的问题

你也真的没理解我的意思!!
真不知道你说什么,两次的话都不同,但我针对第一帖而言:
0、1,如果你以为个数是 1 - 0= 1(个),那你就错了,应该是 1 - 0 + 1 = 2(个)!!
所以0~31是 31 - 0 + 1 = 32(个),而不是31个!!

5

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-10-2 16:15:00 | 显示全部楼层

Re:请教一个画地图的问题

多谢楼上的兄弟耐心的解答,在下感激不尽。
有什么不对,请指出,在下一定改之。

以上是我把问题搅混了,经过重新思考,我发现问题是这样的(对不起,上面是我搞糊涂了)
我把大小为32×32的tile ,blt()到到后备缓冲
tile的左上角x坐标值(rect.left)依次为
0,32,64,96,。。。为32的整数倍
tile的右上角x坐标值(rect.right)依次为
31,63,95,。。。差值为32
为什么显示后,每个tile后面会有1个象素的空隙呢?按理说第一个tile从0-31刚好大小为32。
第二个tile从32-63也刚好是32。以次类推,后备缓冲的每个象素都是画到的。但是实际结果却是第一个tile后面有1个象素的空隙。后面也是这样。同样的,每行之间也有1个象素的空隙。

5

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-10-2 16:17:00 | 显示全部楼层

Re: 请教一个画地图的问题

这是屏幕的左上角
sf_2005102161647.jpg

1

主题

11

帖子

17

积分

新手上路

Rank: 1

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

Re:请教一个画地图的问题

不知道我理解了这位兄弟的意思没有。
其实int x1=0,y1=0,x2=32,y2=32才是正确的。很简单,拿地图左上角的第一个tile举例,当其被正确显示在地图上时,其坐标应该是:左上角的坐标是(0,0);右上角的坐标是(32,0);左下角的坐标是(0,32);右下角的坐标是(32,32)。为什么呢?因为0~31的线段其长度仍然等于31而不是32(0是不能代表一个像素的,而是代表第一个像素左边那个什么也没有的东东!0就是没有,呵呵。)所以如果x2=31,y2=31时图片的大小其实是31*31,有条缝岂不正常?!。

5

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-10-3 11:06:00 | 显示全部楼层

Re:请教一个画地图的问题

多谢楼上兄弟们耐心的解答
谢谢

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-10-3 13:27:00 | 显示全部楼层

Re:请教一个画地图的问题

其实这只是坐标约定的关系,不一定的哦,仔细阅读dx文档会发现第二章有详细的说明过。不过这个约定和大部分的图形API都是一样的。到d3d部分,你就会有更多的认识了。

25

主题

64

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2005-10-3 18:33:00 | 显示全部楼层

Re:请教一个画地图的问题

那个叫一窍不通的,建议看看《Windows游戏编程大师》。受益啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-28 01:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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