游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2475|回复: 7

关于游戏中的储存结构

[复制链接]

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2005-8-16 22:15:00 | 显示全部楼层 |阅读模式
各位前辈们好
今天自己阅独资源的时候才猛然发觉原来对游戏中的基本架构都模糊不已
尤其是它们的储存形式

学校里教的数据结构与算法 在眼皮下更是想不出来有任何的关联
所以想请教一下各位以下元素们的处理方法 :
一) 人物 ( 自己的想法是设立一个通用的家族 CSprite 再各自产生实例 最后把它们的位置用指针形式存在阵列里 ? ) 阵列以二维方法代表地图的座标系
如 Map[1][1] = &Sprite2 在地图(1,1)中有着指向Sprite 2 instance's Pointer ?
请问阵列可以存地址的吗 ? 如果可以的话应该宣告为怎样的阵列 ?
CSprite* map[][] ?

二) 地图座标 : 通常是设立一个全域的二维阵列代表吗 ?
三)所有素材储存的值 : 写一个组态档然后以特别形式读入 ? 由于书上常常出现一些圆圈跟黑点的图示 可用数字不是更加容易辨认吗 ?

四)是不是事先一定就要宣告出地图的大小呢? 由于想做一个较迷你的纯地图斜角引擎
可以实现动态地指定吗 ? 如给出 No*No 再以Staggered Tile 方法产出地图 ?
如果可以的话 又应以怎样的程式码实现呢?
五)请问大家删除时的重绘动作是包括了背景 其余无关精灵的重绘吗 ? 能更加简洁吗 ?

如果希望优化以上的种种 请问有需要使用特殊的形式如
Linked Nodes ?
Binary Trees ?
Stack And Queues ?
吗 ?

不好意思麻烦了大家的分享 由于自己的想法并不太成熟 所以只能多多参考各位的设置用来处理不同物件的结构
谨祝
愉快 ^^

3

主题

130

帖子

130

积分

注册会员

Rank: 2

积分
130
发表于 2005-8-16 22:58:00 | 显示全部楼层

Re:关于游戏中的储存结构

楼上的台湾人地干活?

139

主题

2005

帖子

2057

积分

金牌会员

Rank: 6Rank: 6

积分
2057
QQ
发表于 2005-8-16 23:38:00 | 显示全部楼层

Re:关于游戏中的储存结构

确定一点.楼上是说2D还是3D?我认为这两者多少有些不同

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2005-8-17 12:13:00 | 显示全部楼层

Re: 关于游戏中的储存结构

谢谢樱前辈提醒
现在为之补充
自己正在尝试的是2D斜角地图
多问一下
请问链表是否为储存精灵们提供了一个比较好的选择 因为减少了资料异动 ?
还有关于动态创造精灵 各位前辈是不是先设立了一个家族
然后再用号码来加入实例呢 ?

如 :
void CreateCharacter(){
CSprite Sprite ;
i++;
}; 不好意思 自己的思想还不太成熟 请多加指点

回DoPod 大的话:
不才只是对游戏编写抱着热情 希望能加以研究 才不会浪费学校所教的结构 加以巩固 现在并没有在公司或工作组内干活 ><
先奠定了基础才敢去想呢 @@
希望一起勉励 ^^

5

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2005-8-17 16:23:00 | 显示全部楼层

Re:关于游戏中的储存结构

一般的做法是每个单元格的结构里面存储的是一个Sprite的链表头指针(有可能一个格子上有多个精灵),假如新增了一个Sprite就new一个Sprite实例,或者可以使用高级一点缓冲Sprite区中取一个出来,添加到格子链表的末尾!----这是我认为常用的做法!:)

5

主题

10

帖子

10

积分

新手上路

Rank: 1

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

Re:关于游戏中的储存结构

:)谢谢zjdyhyb兄的意见 尝试理解后 有一些问题还需请教
首先我们是先用二维阵列存取单元格吗 ?
然后这里面的资料都是指向Sprite  链表头的指针类型 ?
Thus In Consequence :

CSprite * map[x][y] ;
map[x][y] = *Sprite

如果是于 Sprite 里 new 各别精灵的资料 ? 请问如何操作呢 ?
是先宣告一个 STL 's List ?
list <Sprite> ; 然后用Push 加入吗 ?
可怎样分别是在特定的单位格内的特定Sprite 呢 ?
不好意思自己的水平不够 可否劳请前辈分享一下这样操作的代码呢 ?
主要是不懂如何New一个精灵 .... ORZ .... >< 而这个New Sprite 如何辨识是在何地图单位的 ?

是否需要在精灵实例中包含座标值
然后让指定的单位格抽出的时候
用搜寻演算法寻找 指定的 纵横座标然后绘出 ?


5

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2005-8-17 19:23:00 | 显示全部楼层

Re:关于游戏中的储存结构

对,是用二维阵列存取单元格!
不过,不建议使用STL的List,为了节省内存,:)
简单的描述:
struct CSpriteList:public CSprite
{
CSpriteList *prevSprite;
CSpriteList *nextSprite;
};

struct GridData
{
CSpriteList *pListHeadSprite;
....//单元格上的其他东西
};

//接下来这样申明
GridData map[width][height] ;

5

主题

41

帖子

41

积分

注册会员

Rank: 2

积分
41
发表于 2005-8-17 19:30:00 | 显示全部楼层

Re:关于游戏中的储存结构

B从(X1,Y1)移动到(X2,Y2)的简易过程A。。。F代表一个CSpriteList)
map[X1][Y1]的格子:A->B->C
map[X2][Y2]的格子:D->E->F
B从(X1,Y1)移动到(X2,Y2)后
map[X1][Y1]的格子:A->C
map[X2][Y2]的格子:D->E->F->B
至于绘制,应该这样的
for(int h = 0; h < height; h++)
for(int w = 0; w < width; w++)
     DrawSpriteFromHead(w,h);
。。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-27 11:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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