游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2208|回复: 4

5555~~~~游戏碰撞的问题!!

[复制链接]

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2007-7-3 21:29:00 | 显示全部楼层 |阅读模式
小弟已经把地图用数组铺好了,可是和地图碰撞的问题依然解决不了,如果哪位大虾能帮小弟把碰撞问题解决,小弟愿为大虾肝脑涂地~~!!请看下面代码

# pragma once

#define CELL_WIDTH 32
#define CELL_HEIGHT 32
#define MAP_LEFT 192
#define MAP_TOP 92
#define TILE_WIDTH 32   //地图块的宽
#define TILE_HEIGHT 32  //地图块的高

typedef struct    //结构体
{
        bool iMap[2][2];
        int iType;
}MAP;
class CMap
{
public:
        CMap()
        {       
        }
        ~CMap()
        {
        }
        void DrawMap();
        void LoadMap();
private:
        MAP m_iMap[13][13];  
protected:
};
extern CMap * g_pMap;
//////////////////////////////////////////////////////////////////
#include "map.h"
CMap * g_pMap;

void CMap:rawMap()
{
        RECT r1 = { 223, 31, 224,32 };
        RECT r2 = { MAP_LEFT, MAP_TOP, SCREEN_WIDTH - MAP_LEFT,SCREEN_HEIGHT - MAP_TOP };
        g_pDDraw->DrawSurface( g_pDDraw->m_pPicSurface[11].pPicSurface, r1, r2, g_pDDraw->m_pBack, 0 );
        for( int i = 0; i < 13; i++ )
        {
                for( int j = 0; j < 13; j++ )
                {
                        if( m_iMap[j].iType == 8 )
                                continue;
                        if( m_iMap[j].iType == 5 || m_iMap[j].iType == 6 )
                        {
                                g_pDDraw->DrawSurface( g_pDDraw->m_pPicSurface[PIC_TILE].pPicSurface, m_iMap[j].iType * TILE_WIDTH, 0, TILE_WIDTH, TILE_HEIGHT,  MAP_LEFT + j * CELL_WIDTH, MAP_TOP + i * CELL_HEIGHT, g_pDDraw->m_pBack, 0 );
                                continue;
                        }
                        for( int ii = 0; ii < 2; ii++ )
                        {
                                for( int jj = 0; jj < 2; jj++)
                                {
                                        if( m_iMap[j].iMap[ii][jj] )
                                                g_pDDraw->DrawSurface( g_pDDraw->m_pPicSurface[PIC_TILE].pPicSurface, m_iMap[j].iType * TILE_WIDTH, 0,
                                                TILE_WIDTH / 2, TILE_HEIGHT / 2, MAP_LEFT + j * CELL_WIDTH + jj * ( CELL_WIDTH / 2 ), MAP_TOP + i * CELL_HEIGHT + ii * ( CELL_HEIGHT / 2 ), g_pDDraw->m_pBack, 0 );
                                }
                        }      
                }

        }
}

void CMap:oadMap()
{
        FILE * pFile = _tfopen( L"pic/map.txt", L"r" );
        memset( m_iMap, 1, sizeof( MAP ) * 13* 13 );
        for(int i = 0; i < 13; i++ )
        {
                for(int j = 0; j < 13; j++ )
                {
                        m_iMap[j].iType = fgetc( pFile ) - 48;
                }
        }
}
//上面这些只是铺地图的代码,哪位大虾愿给小弟加上和地图碰撞的代码,小弟感激不尽~~ [em17] [em17]

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2007-7-4 14:38:00 | 显示全部楼层

Re:5555~~~~游戏碰撞的问题!!

汗啊~~咋都米人帮忙~   T T~~

29

主题

224

帖子

224

积分

中级会员

Rank: 3Rank: 3

积分
224
QQ
发表于 2007-7-5 03:37:00 | 显示全部楼层

Re:5555~~~~游戏碰撞的问题!!

我以前是把屏幕分割N块,每块状态记录到数组,每次移动一个对象就遍历它下一步要覆盖的块的状态,如果里面是地图内容,说明碰撞产生,计算对象可以到达的位置即可.笨方法,但可以通过.
演示:http://bbs.gameres.com/upload/sf_200697202857.rar

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-7-6 13:13:00 | 显示全部楼层

Re: 5555~~~~游戏碰撞的问题!!

我是用另外一个数组来记录障碍的,大小和地形数组一样 [em5]

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2007-7-6 18:36:00 | 显示全部楼层

Re:5555~~~~游戏碰撞的问题!!

楼上大虾能否说的具体一些?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 22:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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