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

2023-11-06 16:30

本文主要是介绍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方法

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

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

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

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

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

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

我们先看init方法:frame0.cpp

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

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

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

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

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

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

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

 

这是我们要做的目标:

项目开源地址:

https://github.com/yinhui1129754/fishing

游戏开发交流群:

859055710

这篇关于12.Direct2D 捕鱼游戏开发-编写场景0结构frame0.h的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/357750

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2