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

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Spring Security 前后端分离场景下的会话并发管理

《SpringSecurity前后端分离场景下的会话并发管理》本文介绍了在前后端分离架构下实现SpringSecurity会话并发管理的问题,传统Web开发中只需简单配置sessionManage... 目录背景分析传统 web 开发中的 sessionManagement 入口ConcurrentSess

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

99%的人都选错了! 路由器WiFi双频合一还是分开好的专业解析与适用场景探讨

《99%的人都选错了!路由器WiFi双频合一还是分开好的专业解析与适用场景探讨》关于双频路由器的“双频合一”与“分开使用”两种模式,用户往往存在诸多疑问,本文将从多个维度深入探讨这两种模式的优缺点,... 在如今“没有WiFi就等于与世隔绝”的时代,越来越多家庭、办公室都开始配置双频无线路由器。但你有没有注