游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1783|回复: 3

关于2D游戏程序的结构设计问题(资源管理相关)

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2011-10-17 11:53:00 | 显示全部楼层 |阅读模式
经验浅薄,望乞前辈多多指点,下面是我的设计方案:


【overview】
主线程(Main)                : 通过向子线程发送命令来实现全局调度
D3D管理线程(Thread_D3D)        : 管理d3d设备相关的对象操作。维护一段内存块(纹理内存块和声音内存块)
IO线程(Thread_IO)        : 负责资源加载和解析(纹理、声音),维护一段内存块,分配给所加载的资源


【details】
[主线程]
1:创建win32窗口,维护Win32窗口消息
2:维护UI的更新
3:维护游戏主逻辑
4:维护与脚本的交互


[D3D管理线程]
1:负责D3D相关设备的初始化和释放
2:负责加载/卸载纹理、声音等资源
3:维护供纹理使用的一段内存块
   ·首先预分配一定容量的纹理内存空间,比如100M,然后每加载一个纹理,便计数所占用的空间
   ·当100M用完之后,便查找所有被标记为废弃的内存,然后从中取出一个使用,如果废弃的纹理空间总量达到一定程度则集中释放这些空间,若无废弃内存,则递增100M空间(比如一次增加50M)。以此循环往复
4:维护供声音使用的内存块,实现方式同纹理


[IO线程]
1:负责资源的加载和解析,如纹理、声音等资源
2:维护一段内存块,供临时加载的纹理、声音等资源使用。实现方式同纹理


【线程同步方案】
1:使用InterlockedExchange进行互斥
2:实现线程免锁,即所有线程对于外部数据只有读的权利,而没有写的权利,比如:
   ·D3D线程向IO线程发出加载纹理命令
   ·IO线程将加载好的bmp数据指针传给D3D线程
   ·D3D线程则用此指针将bmp数据lock到纹理中


各位觉得这样设计,可以么?一般都是用的什么方案?

0

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
QQ
发表于 2011-10-18 10:57:00 | 显示全部楼层

Re:关于2D游戏程序的结构设计问题(资源管理相关)

game programming gems系列书籍,各册均有讨论或给出解决方案.你可以自己下载相关书籍研究一下.

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20515
发表于 2011-10-18 16:37:00 | 显示全部楼层

Re:关于2D游戏程序的结构设计问题(资源管理相关)

像我个人倾向还是少用逻辑相关线程

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2011-10-18 18:48:00 | 显示全部楼层

Re: Re:关于2D游戏程序的结构设计问题(资源管理相关)

sea_bug: Re:关于2D游戏程序的结构设计问题(资源管理相关)

像我个人倾向还是少用逻辑相关线程


您是说,少用线程么?
还是指,不要把逻辑放到子线程中?(我的主逻辑在主线程里,子线程仅仅负责加载资源等操作。)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 23:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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