游戏中地图的画法 |
| 作者:佚名 来源:本站整理 发布时间:2008-4-8 0:57:43 |
|
用一个整数变量来控制移动。我们声明一个[nStartPosition]变量存放地图的出发点。我们不断的增加或减少这个变量,使屏幕看上去在左右移动。让我们试用这代码 <第四段源码> static BYTE MapData[] = "AAAAAAAAAAA" "AAAAAAAAAAA" "AAAAAAAAAAA" "AAAAAAAAAAA" "AAAAAAAAAAA" "AAAAAAAAAAA" "AAAAAAAAAAA" "AAAAAAAAAAA" "AAAAAAAAAAA"; .... case WM_TIMER: nStartPosition += nOffset; nStartPosition = max(0,min(nMapCX-8)); RenderTileMap(hOffscreenDC,MapData+nStartPosition,11,9); UpdateDisplay(hWnd) break; case WM_KEYDOWN: if((WORD)uParam == VK_LEFT) nOffset = -1; else nOffset = 1; break; case WM_KEYUP: noffset = 0; break; .... 程序从地图的最左方启动,当到最右方时则滚动屏幕,它会不停的循环直到你停止程序。 这个技术能有效的改进你的游戏。它能被用于许多游戏。虽然比起第一种技术它需要更多的内存,但它绝对是值得一用的技术。 全景 全景或视差是一种很流行的的技术,被许多游戏使用。当计算机有了更多的内存时这个技术被开发存储更大的图片。让我们看下面的图片。图片的从右到左都是没有任何缺陷的,并且图片非常的精细。 <图6> 现在, 让我们试试这代码。 <第五段源码> static int nRunning; static HBITMAP hBitmap1; static HDC hDCBitmap; case WM_CREATE: hBitmap1 = LoadBitmap(...); hDCBitmap = CreateComaptibleDC(GetDC(0)); SelectObject(hDCBitmap,hBitmap1); nRunning = 0; .... break; case WM_TIMER: if(++nRunning > nBitmapWidth) nRunning = 0; n1 = 320 - nRunning; PatBlt(hOffscreenDC,0,0,240,320,BLACKNESS); BitBit(hOffscreenDC,0,320-55,min(n1,240),55,hDCBitmap,nRunning,0,SRCCOPY); if(n1 < 240) BitBit(hOffscreenDC,n1,320-55,240-n1,55,hDCBitmap,0,0,SRCCOPY); UpdateDisplay(hWnd); break; .... 如果你试了它你将会注意到,背景的移动是光滑的,漂亮的,并且和使用贴图比更容易实现。而且你可以以象素为单位移动背景。好,我们在背景上加上一个精灵看看。试试下面的代码; <源码6> 请从原文网站下载,这里就不提供了。 --> Clouds.bmp.zip --> Mountain.bmp.zip --> Road.bmp.zip --> Panorama.demo.zip ...NYI 它怎么工作?你能看到我们有3张平行的背景图片。先出现一张云照片它在最后面,是一个静止的图象。山脉图片是一个精灵。它被画在云照片上。最后一个是一条道路的图片。它放在最顶上。使用不同的移动速度,我们能生产非常有趣的游戏。 我们把它们融合到一起使用怎么样!!完全正确,并没说一个游戏中使用一种技术。为了做到领先一步,我们往往需要使用超过一种技术来生产更有趣的游戏。另外,计算机技术的发展回带来更新的开发技术。也许我们今天讨论的技术并不适合现在的PDA设备,但掌握它们肯定是不会错的。 还有其他的技术吗?当然,还有有很多有趣实用技术,但在这里讨论它们显得太复杂了,所以我并没有在这个初级教程中涉及它们。 |
| [] [返回上一页] [打 印] |
|
文章评论 |
