cybersword 2012-02-01 13:03
@独孤残云
多谢指点,原本是想把这个游戏用最简单的GDI做完,然后再学习Direct3D和OpenGL,慢慢向主流技术靠拢,这几天下来,核心模块差不多成型了,但是架构一塌糊涂,感觉还是好多消息响应之类的东西不是很理解,比如GetAsyncKeyState()检测键盘的状态,这个函数试过几次都没能使用成功,也不知道是不是跟我原来的消息循环冲突了。
请问有没有游戏编程的必读书籍,或者案例什么的。
cybersword 2012-02-01 12:51
@hoodlum1980
多谢指点
第一条中那个临时性非持久性,我一直耿耿于怀,因为切出去之后回来就要黑屏一下,不过一直没找到解决办法,现在终于有办法了,只是WM_PAINT还不太熟悉,还得细细琢磨一番。
第二条的话,是不是应该把bitmap弄成全局变量,在最开始的时候加载,然后在退出游戏的时候delete?
第三条后来我在某个网站上看到有人说,游戏里面改了,这里忘了。。
hoodlum1980 2012-01-30 12:53
我以为第一个的输出也是指针的size,没想到也是数组长度。
hoodlum1980 2012-01-30 12:49
@cybersword
发表一点点看法,仅供参考。
(1)不应该用GetDC然后绘图,这种直接在窗口DC上绘制的方法1是比较暴力,2是临时性而非持久性的(比如窗口被遮挡,最小化等,无法复原)。这种方式我觉得比较少见。正确的方法是在WM_PAINT消息中处理所有的绘图逻辑。
(2)反复的从文件中加载一个bitmap,然后delete object,这样做的效率可能较低。
(3)CreateCompatibleDC返回的DC应该用DeleteDC函数释放,而不是ReleaseDC。(GetDC 的返回值应该用后者释放)。
(4)虽然你使用的是内存DC。本着一个bitmap同一时刻只能被一个DC选入的原则,最好把位图先从DC中选出再Delete,是一种比较好的习惯。(这一点我觉得不一定是严格的,只是一个建议)
独孤残云 2012-01-30 10:10
用DC起步可以较大限度的接触游戏编程的本质,同时巩固C++基础。
LZ坚持的话,可以先试着找一些DC的2D编程框架,看看别人的架子是怎么搭起来的,同时留意一下相应的绘制函数应该怎么来封装。
DDraw虽然最接近2D的本质,但自身毕竟存在了太多的局限性,Direct3D和OpenGL会是之后的必然趋势。LZ如果感觉这两者有难度,也可以考虑先试着从Xna入手。
Bill Basilone 2012-01-29 14:38
@cybersword
必须的D3D,OpenGL
cybersword 2012-01-28 23:59
@hoodlum1980
还请高手指点
James-yu 2012-01-28 20:09
sizeof(s) 是s这个指针型的长度,32位系统指针型都是32位(4个字节),所以是4。 试试sizeof(*s)
学C,指针一定要搞明白
lazylu 2012-01-28 17:10
呃~~~BitBlt在上世纪末的时候可是相当普遍的方法………………
hoodlum1980 2012-01-28 14:30
很遗憾,错误和不当之处较多。
影语者 2012-01-28 12:53
为什么要用gdi?如果只是关心游戏的制作,推荐现成的2d引擎:HGE,如果是想深入底层的话,推荐opengl,dx,而不是gdi
cybersword 2012-01-27 00:55
@Bill Basilone
请问您是游戏程序员么,我想问下做2D游戏是不是一定要用到DirectX SDK,比如DirectDraw之类的。。只用GDI可以实现么。。
Bill Basilone 2012-01-26 01:04
游戏设计在博客园算冷门的话题,我关注一下
李琳Mike 2012-01-25 16:35
刚一开始的话 过多的效果在一起很难将基本代码吸收 所以书里肯定不会写的很复杂的
反而写的精巧的会好点
cybersword 2011-12-04 00:32
@小山982
我在王大伦编著的《C/C++程序设计实用教程》(清华大学出版社)里面看到的,以前没仔细想过long之类的到底能修饰什么,于是便记录了一下。。
小山982 2011-12-03 20:35
long long a=2在vc++2008,linux g++4下编译通过(其它不敢保证),上面的第二条的“只”字肯定说不过去,放在首页的东西要严谨。。。
voop 2011-12-01 10:09
@小山982,
那个全程是long long int,其实还是修饰int,long不过是修饰词,而且long long这个长整数也不是所有编译器都支持的
小山982 2011-12-01 09:28
第二点有误,long可以修饰long,比如long long a=2;