今天把原来用delphi编写的单机泡泡堂源码发布到delphi盒子里去了  ;原来计划完善这个游戏也到此告一段落,游戏没写完,不是做不聊,就是没有时间再开启delphi去写代码,只能每天打开vs.net;所以想把游戏移植到.net平台上,反正还是学习+娱乐。PS:老婆生日快到了,去年就是写这个游戏做生日礼物,今年也不例外。

BNB,是纯2d的,也不需要特效,所以使用DirectDraw足够了;于是装了个DXSDK 9.0c,准备做一个2D的基础库,实现Sprite ,input,Screen,Font,GUI,Time 的管理;但毕竟还是造‘车轮’的工作;干脆找个完善的2d 引擎。(为什么不用D3d,原因是我还刚入门,5.7号才去书店买书啊……但DDraw却用了很长时间了)

想起以前在sf.net上看到的MCDX还不错,C#开发的,纯ddraw的封装;从名字上看应该是受了XX年前的C++版CDX的影响(当时CDX我还学过,以为做游戏有它足够了);马上下载了一份,mcdx已经更新到2.0 了,大致看了一下,结构还不错,上手大概就是10来分钟;于是乎就出了这么一段代码:

开源DirectDraw 2D引擎MCDX首次试用笔记    private MCDX.CDXControl cdxControl1;
开源DirectDraw 2D引擎MCDX首次试用笔记    
private CDXSprite player;
开源DirectDraw 2D引擎MCDX首次试用笔记    
private CDXTile playerTile;
开源DirectDraw 2D引擎MCDX首次试用笔记    
private CDXTimer timer;
开源DirectDraw 2D引擎MCDX首次试用笔记    
private CDXInput input;


CDXControl 是一个可视组件,是唯一可以添加到工具栏上的,等同于Surface的管理器,负责控制显示设备的刷新、控制属性等等方面;

CDXSprite 就是一个精灵基类,它提供了Draw的方法,可以制定绘制到某个Surface,当然这样做很灵活,其实也可以再增加一个精灵管理类,统一管理绘制、移动、碰撞检测、消亡。

CDXTile 负责管理Tile,比如连续的图块,它用于切割和制定存储方式(系统内存、显存)

CDXAnimation 用于管理图块的动画顺序,被CDXSprite CDXMap用到;

CDXTimer 高分辨率计时器(我一直这样称呼的),很精确,比不负责任的Time消息好多了

CDXInput 收集键盘和鼠标的消息

为了出第一个EXE,暂时这些足够了;

这个MCDX给我的第一影响,是结构比较清晰,但还不强大,有些部分可能和我原来的设计思路有点不一致,感觉有点别扭;不过仔细想想,却是比较灵活多变,见仁见智吧,反正有源码,不顺眼马上改改得了。

首先,先做个小人在屏幕上跑动看看

添加CDXControl 到Form上,设置 UseGameLoop = true;

在CDXControl 的 InitializeObjects 事件中初始化Sprite 和相关的元素;

开源DirectDraw 2D引擎MCDX首次试用笔记      input = new CDXInput(cdxControl1.Screen, thistruetruefalse); //建立键盘管理,支持手柄的
        //建立sprite的图像元素切割器,48/57是人物每帧画面的大小,16是总帧数
开源DirectDraw 2D引擎MCDX首次试用笔记      playerTile 
= new CDXTile(cdxControl1.Screen, "player1.bmp",485716, MemTypes.SystemOnly);
        //制定透明色,这里是用的紫色
开源DirectDraw 2D引擎MCDX首次试用笔记      playerTile.ColorKey 
= Color.FromArgb(2550255);
开源DirectDraw 2D引擎MCDX首次试用笔记
        //创建sprite
开源DirectDraw 2D引擎MCDX首次试用笔记      player 
= new CDXSprite(playerTile,-1);
开源DirectDraw 2D引擎MCDX首次试用笔记
开源DirectDraw 2D引擎MCDX首次试用笔记      
int[] anim;
; //制定FPS

现在要做的就是绘制图形,在CDXControl 的 DrawFrame 事件里

开源DirectDraw 2D引擎MCDX首次试用笔记      cdxControl1.Screen.BackSurface.ColorFill(Color.Black); //清屏,黑色,为了显示新图像
开源DirectDraw 2D引擎MCDX首次试用笔记      player.Draw(cdxControl1.Screen.BackSurface, BltTypes.Trans); //制定绘制到目标surface,这里不需要手工换页

更新画面,在CDXControl 的 MoveFrame 事件里
      }


现在可以看到了运行结果;

可以看到MCDX确实简化了许多工作量,简单好用,不过还是太简单了点,嘿嘿;看来我想真正做好这个生日礼物还得再改改它了~

想试试的,建议看看MCDX带的演示;

相关文章:

  • 2021-10-14
  • 2021-04-30
  • 2022-02-19
  • 2021-08-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-30
  • 2021-06-02
猜你喜欢
  • 2021-12-27
  • 2022-12-23
  • 2022-12-23
  • 2021-12-18
  • 2022-12-23
  • 2022-12-23
  • 2022-01-08
相关资源
相似解决方案