12.Direct2D 捕鱼游戏开发-编写场景0结构frame0.h

环境:

编辑器:VS2015

系统:win10 专业版

碰撞:aabb obb盒模型(obb采用分离轴进行判断)

渲染:direct2d

再说代码之前我们先看看我们的界面截图:

我们先冷静分析这个界面的相关元素

首先这里应该有一个场景对象(action.h)来渲染各种精灵对象(sprite.h)然后当面点击开始游戏的时候我们的场景进行了切换所以这里还应该有一个消息映射(createBefore.h)所以这里就会用到我们的click事件然而当我们的场景有时候需要动画的时候怎么办所以这里就需要一个计时器(ticker.h)来操作动画的流程然后我们的主要程序是基于窗口的所以这里就还需要一个窗口操作对象(demoapp.h)好了经过上面的分析我们知道了我们的场景的基本结构(名字空间)

下面我们来看看主要的属性和方法:

主要属性:

scene储存场景对象的属性

app 储存操作app对象的属性

colObj 储存碰撞对象的属性(虽然没有用)

maxBox储存一个最大容器的属性(这个属性其实就是放入到场景对象的容器对象的一个容器方便我们在写代码的时候好操作)

主要方法:

init初始化场景的时候调用的函数(场景显示与否都会调用)

onClick 消息映射的click函数

visible 场景显示调用的函数

场景0(frame0.h)的调用流程:

看createBefore.cpp下的createWindow方法

12.Direct2D 捕鱼游戏开发-编写场景0结构frame0.h_第1张图片

我们设置了一个全局变量(不要问我为什么又了全局变量还要到处传因为我也不知道(嘿嘿嘿))

然后我们new了一个碰撞对象(所有的物理引擎都会有一个这样的内置对象或者方法没有的都是不完整的物理引擎)

然后我们调用场景0(frame0.h)的初始化函数然后我们将场景0的场景对象放到我们的app对象里面

下面的场景1(frame1.h)和场景2(frame2.h)也是一样的操作只是场景同时调用了visible;

可以看到场景0的运行内存才15.2mb

下面我们对场景0的各个方法进行说明:

我们先看init方法:frame0.cpp

12.Direct2D 捕鱼游戏开发-编写场景0结构frame0.h_第2张图片

我们先将场景对象给new出来然后我们赋值app,colObj属性然后我们将消息映射的onclick给赋值上然后我们new出一个displayObject对象然后我们将new出来的显示对象放入名字空间的场景(scene)属性中
下面我们看visible方法:frame0.cpp

12.Direct2D 捕鱼游戏开发-编写场景0结构frame0.h_第3张图片

我们先将场景需要的精灵对象(背景,按钮,logo)给创建出来(new)然后放到我们的场景的最大容器里面

下面的操作就是设置logo和按钮的位置

下面我们看click方法:frame0.h

12.Direct2D 捕鱼游戏开发-编写场景0结构frame0.h_第4张图片

我们先获取到我们的开始游戏按钮(大家不要担心变量过多而内存泄露要知道我们用的是(c艹)拥有自动回收垃圾变量的机制)

然后我们调用精灵对象的inRect其实这个就是一个简单的aabb判断只不过是一个点的判断我们判断一个点是不是存在鱼精灵对象里面这里我们判断鼠标位置是不是在开始游戏精灵对象里面如果在我们就设置当前场景对象为frame2选择游戏场景的界面

这里就是场景最基本的几个方法了其实这里少了一个方法我们应该有一个类似于销毁场景的方法(来释放掉场景中的多余精灵坑已经留在这里了如果要用这套源码还请自己修改哦)来隐藏场景这样就可以在场景切换的时候起到非常多的作用

 

这是我们要做的目标:

项目开源地址:

https://github.com/yinhui1129754/fishing

游戏开发交流群:

859055710

你可能感兴趣的:(游戏流程开发,Direct2D,C,游戏开发,游戏案列,游戏设计,windows2D游戏开发)