游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2136|回复: 5

求助,关于拼接地图的问题

[复制链接]

6

主题

11

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2009-6-5 12:20:00 | 显示全部楼层 |阅读模式
小弟初学DX,现在用DX写2D游戏的地图部分,我的地图是用一个一个的TILE拼成的,每个TILE对应了一张texture的BMP,每帧根据地图的位置来从二维数组中加载相应的部分
struct MAPOBJECT
{
        int m_nID;                                                //标识ID
        CUSTOMMAPCELL centerMapCell;                                //地图对象所包含的中心位置地图块
        POINT m_LeftTopPos;                                        //左上角顶点坐标        LPDIRECT3DVERTEXBUFFER9        m_pVB;                        //纹理图片的顶点缓冲
        LPDIRECT3DTEXTURE9 m_pTexure;                                //纹理对象指针
};

list<MAPOBJECT*> m_ListBackgroundTilesInScreen;                             //当前位于屏幕显示区域内的TILE
LPDIRECT3DDEVICE9       m_pd3dDevice;                                 //这个为在外部传进来的当前屏幕的DEVICE

void Update()
{
  //根据人物在大地图中的当前位置确定nStartRowIndex,nStartColIndex,nEndRowIndex,nEndColIndex
  。。。。

  ClearBackgroundTilesList();                // 清空m_ListBackgroundTilesInScreen
  
  MAPOBJECT* pBackgoundTile = NULL;
  for (i = nStartRowIndex;i < nEndRowIndex; i++)
    for (j = nStartColIndex; j < nEndColIndex; j++)
    {
      pBackgoundTile = new  MAPOBJECT;  
      //根据i,j和偏移来设置pBackgoundTile-> m_LeftTopPos;
      D3DXCreateTextureFromFile(m_pd3dDevice,"Image\\001.bmp",&(pBackgoundTile->m_pTexure));
      
      CUSTOMVERTEX1 vertices[6] = {。。。。}                         //纹理图片矩形的4个顶点

      m_pd3dDevice->CreateVertexBuffer( 6*sizeof(CUSTOMVERTEX1),                       
                                0, D3DFVF_CUSTOMVERTEX1,
                                D3DPOOL_DEFAULT,
                                &(pBackgoundTile->m_pVB), NULL );
     VOID* pVertices;
        pBackgoundTile->m_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 );
        memcpy( pVertices, vertices, 6*sizeof(CUSTOMVERTEX1) );
        pBackgoundTile->m_pVB->Unlock();

           m_ListBackgroundTilesInScreen.push_back(pBackgoundTile);
     }
}

void Render()                                            
{
    m_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX1)
    for (list<MAPOBJECT*>::iterator it = m_ListBackgroundTilesInScreen.begin(); it != m_ListBackgroundTilesInScreen.end(); it++)
        {
                m_pd3dDevice->SetTexture(0, (*it)->m_pTexure);
                m_pd3dDevice->SetStreamSource(0, (*it)->m_pVB, 0, sizeof(CUSTOMVERTEX1));
                m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
        }

}

之后在外部的Update()中先调用地图部分的Update(),然后在外部的Render()中调用地图部分的Render(),这样效果是实现了,不过当屏幕贴满TILE的时候,FPS变得很低,移动地图的时候显得很卡,如果只贴一半的TILE,FPS就会提高许多,请问我问题是出在哪里?




1

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2009-6-5 12:48:00 | 显示全部楼层

Re:求助,关于拼接地图的问题

rend的时候读地图,是不是太慢了啊?

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2009-6-5 15:44:00 | 显示全部楼层

Re:求助,关于拼接地图的问题

拼接好以后。渲染一次。不要一个一个渲染

6

主题

11

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2009-6-5 16:37:00 | 显示全部楼层

Re:求助,关于拼接地图的问题

请问楼上的朋友,你说的渲染一次是不是就是指先创建一张和屏幕大小一样的纹理,再将这些小纹理一个一个渲染到这个大纹理上,最后再把这个大纹理一次性渲染到屏幕上呢?我现在按照这种方法改了,不过FPS还是很低。。

21

主题

73

帖子

73

积分

注册会员

Rank: 2

积分
73
发表于 2009-6-5 17:29:00 | 显示全部楼层

Re: Re:求助,关于拼接地图的问题

cchentao: Re:求助,关于拼接地图的问题

请问楼上的朋友,你说的渲染一次是不是就是指先创建一张和屏幕大小一样的纹理,再将这些小纹理一个一个渲染...

把texture拼成一个大图,把所有的小网格合并成一个大网格,一次渲染出来

6

主题

11

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2009-6-5 18:50:00 | 显示全部楼层

Re:求助,关于拼接地图的问题

能不能给点示例代码啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 01:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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