当前位置: 首页 > news >正文

(四)C++自制植物大战僵尸游戏启动流程

植物大战僵尸游戏开发教程专栏地址icon-default.png?t=N7T8http://t.csdnimg.cn/ErelL


一、启动方式

鼠标左键单机VS2022上方工具栏中绿色三角按钮(本地Windows调试器)进行项目启动。第一次启动项目需要编译项目中所有代码文件,编译生成需要一定的时间。不同性能的电脑需要消耗的时间差别可能较大,通常在几分钟到几十分钟之间。编译成功后会自动启动运行游戏。

qi

编译成功后自动启动运行游戏如下图。

 二、启动流程

1. main函数

首先找到项目的main函数。mian函数在Class文件夹下的PlantsVsZombies.cpp文件中。

int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow)
{HANDLE hMutex = ::CreateMutex(NULL, TRUE, L"LZPVZGAME");if (hMutex != NULL){if (GetLastError() == ERROR_ALREADY_EXISTS){CloseHandle(hMutex);hMutex = NULL;MessageBoxW(nullptr, L"此程序已经启动,禁止多次启动此程序!", L"error", MB_OK);return 0;}}UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// create the application instanceAppDelegate app;return Application::getInstance()->run();
}

在Main函数中首先判断进程实例是否已经存在,如果存在则不会创建新的进程。游戏只允许一个进程实例进行运行。例如Windows任务管理器也是只允许一个进程实例。 

// create the application instance
AppDelegate app;
return Application::getInstance()->run();

2. AppDelegate

这两行代码用于创建启动Cocos2d-x游戏实例。启动之后会进入AppDelegate.cpp文件中的applicationDidFinishLaunching()函数中。

bool AppDelegate::applicationDidFinishLaunching() 
{// initialize directorauto director = Director::getInstance();auto glview = director->getOpenGLView();if(!glview){
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX)glview = GLViewImpl::createWithRect("PlantsVsZombies_1.2.0.3 (2020.06.19)", cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height));
#elseglview = GLViewImpl::create("PlantsVsZombies_1.2.0.3 (2020.06.19)");
#endifdirector->setOpenGLView(glview);}// turn on display FPSdirector->setDisplayStats(true);// set FPS. the default value is 1.0/60 if you don't call thisdirector->setAnimationInterval(1.0f / UserInformation::getScreenDisplayFrequency());// Set the design resolutionglview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::EXACT_FIT);register_all_packages();// create a scene. it's an autorelease objectauto scene = LoadingScene::createLaodingScene();// rundirector->runWithScene(scene);return true;
}

 在applicationDidFinishLaunching()函数中创建了游戏窗口,设置游戏运行帧率,最后切换场景进入游戏加载场景。

3. LaodingScene

在游戏加载场景中会进入init函数中。在init函数会进行游戏版本检查,检测游戏是否有更新,如果有更新,则会进入游戏更新场景。然后计算文件总数,设置系统参数,以及加载游戏文件同时展示加载动画。游戏文件加载是异步操作,会启动一个新的线程进行文件加载,否则游戏加载时界面就不能展示动画,动画会卡住,直到文件加载完成。

当所有文件加载完成后进入游戏按钮就会设置为可点击状态。点击后进入游戏主界面场景。

点击开始游戏按钮,触发回调函数,进入游戏主界面。同样的然后会调用主界面场景的init函数来创建游戏主场景。

至此,从主函数开始,到游戏加载完成进入游戏主界面的流程大概讲解完成。

三、后续 

下一篇会详细讲解游戏文件加载场景中的细节。LoadScene.h和LoadingScene.cpp中详细的代码执行流程以及每个函数的作用。

相关文章:

(四)C++自制植物大战僵尸游戏启动流程

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/ErelL 一、启动方式 鼠标左键单机VS2022上方工具栏中绿色三角按钮(本地Windows调试器)进行项目启动。第一次启动项目需要编译项目中所有代码文件,编译生成需要一定的时间。不同性能的电…...

华为的AI战略地图上,才不是只有大模型

图片来源:pixabay© 钛媒体ToB深水区 图片来源:pixabay 大模型火热了一年,现在还没做AI化改造的企业,就像是工业革命浪潮伊始与火车赛跑的那辆马车。 最早的蒸汽火车缓慢又笨重,甚至铁轨上还预留了马匹行走的空…...

采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示

采用C#.Net JavaScript 开发的云LIS系统源码 二级医院应用案例有演示 一、系统简介 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享&#xff0…...

Vue3(三):生命周期、路由、自定义hooks

这里终于明白了为什么一直有这个语法报错,就是在提示你哪里错的地方上方注释一行/*eslint-disable*/,之前一直警告这个错误感谢老师! 一、vue2和vue3生命周期 还有一个问题就是父组件和子组件哪个先挂载完毕呢?答案是子组件先挂…...

UE4_导入内容_骨架网格体

FBX 导入支持 骨架网格体(Skeletal Mesh) 。这提供了一种简化的处理流程来将有动画的网格体从 3D应用程序中导入到虚幻引擎内,以便在游戏中使用。除了导入网格体外,如果需要,动画和变形目标都可以使用FBX格式 在同一文…...

第十五届蓝桥杯c++b组赛后复盘和真题展示

题目变成八道了,分数一百分可能,感觉拿奖难度还是很高 第一题是一个简单的握手问题 答案算出来1204,纯手写 第二题是 物理题 纯蒙,随便猜了个轨迹,答案具体忘了,最后是 .45 第三题暴力 第四题 我是傻逼…...

代码随想录 二叉树—二叉搜索树中的搜索

思路:当节点为空或者等于目标值,直接返回。由于是二叉搜索树,特点是左子树的值都小于根节点值,右子树的值均大于根节点,那么,左右子树的构建可以通过值的判断来递归调用。 c题解: /*** Defini…...

⑤-1 学习PID--什么是PID

​ PID 算法可以用于温度控制、水位控制、飞行姿态控制等领域。后面我们通过PID 控制电机进行说明。 自动控制系统 在直流有刷电机的基础驱动中,如果电机负载不变,我们只要设置固定的占空比(电压),电机的速度就会稳定在…...

【OTA】STM32-OTA升级——持续更新

【OTA】STM32-OTA升级——持续更新 文章目录 前言一、ymodem串口协议1、Ymodem 协议2、PC3、蓝牙4、WIFI云平台 二、UDS车载协议1.UDS协议 总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、ymodem串口协议 1、Ymodem 协议 STM32 Ymodem …...

java 字符集

ASCII 与 GBK ASCII:英文专用GBK:中文专用 万国码 unicode想要统一这个世界上所有的语言,所以创造了UTF-32但是使用32位,也就是4个字节,对于很多语言来说,过于奢侈,也会造成通信效率和存储效率变低 UTF-8 unicode 创造…...

Alibaba --- 如何写好 Prompt ?

如何写好 Prompt 提示工程(Prompt Engineering)是一项通过优化提示词(Prompt)和生成策略,从而获得更好的模型返回结果的工程技术。总体而言,其实现逻辑如下: (注:示例图…...

用html写一个雨的特效

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>雨特效</title><link rel"stylesheet" href"./style.css"> </head> <body> <div id"wrap-textu…...

前端 接口返回来的照片太大 加载慢如何解决

现象 解决 1. 添加图片懒加载 背景图懒加载 对背景图懒加载做的解释 和图片懒加载不同&#xff0c;背景图懒加载需要使用 v-lazy:background-image&#xff0c;值设置为背景图片的地址&#xff0c;需要注意的是必须声明容器高度。 <div v-for"img in imageList&quo…...

003 传参

文章目录 传参http 状态码传参方式&#xff08;1&#xff09;URL请求参数 key 与 方法中的形参名一致&#xff08;2&#xff09;URL请求参数 key与RequestParam("id") 中的别名一致&#xff08;3&#xff09; 形参是POJO类&#xff0c;URL 参数 key 与pojo类的 set方…...

QT写Windows按键输出(外挂)

一、前言 玩游戏的时候遇到些枯燥无味反反复复的按鼠标键盘的情况时&#xff0c;就想写个外挂自动释放。刚好在学qt所以试验了下QT能不能对外输出按键与鼠标。 二、思路 qt中的按键鼠标全是输入&#xff0c;没有直接对外输出键盘鼠标指令的类&#xff0c;但是我们换个思路&…...

Stable Diffusion之文生图模型训练

1、数据准备 提前准备好一组相关的照片。 在线的图片处理网站 BIRME - Bulk Image Resizing Made Easy 2.0 (Online & Free) 将图片转成统一大小&#xff0c;支持批量处理&#xff0c;效率高 2、生成提示词 进入stable diffusion webui页面 旧版直接使用 train/proproc…...

SpringBoot整合支付宝沙箱支付

环境说明&#xff1a;SpringBoot3.0.2 支付宝沙箱地址&#xff1a;沙箱地址 获取配置信息 因支付需要回调地址&#xff0c;回调地址必须是公网&#xff0c;如果有公网的话&#xff0c;那直接在下面配置文件填写自己的公网&#xff0c;没有的话&#xff0c;就需要我们借助第三…...

探索进程控制第一弹(进程终止、进程等待)

文章目录 进程创建初识fork函数fork函数返回值fork常规用法fork调用失败的原因 写时拷贝进程终止进程终止是在做什么&#xff1f;进程终止的情况代码跑完&#xff0c;结果正确/不正确代码异常终止 如何终止 进程等待概述进程等待方法wait方法waitpid 进程创建 初识fork函数 在…...

在mac环境下使用shell脚本实现tree命令

文章目录 使用ls实现tree使用find实现tree 使用ls实现tree 实现思路 使用ls -F 打印文件类型&#xff0c;如果是目录后面跟/&#xff0c;如果是可执行文件后面跟*&#xff1b;使用grep -v /$ 筛选文件排除目录&#xff0c;-v为反向筛选&#xff1b;使用grep /$ 仅筛选目录&am…...

递归时间复杂度分析方法:Master 定理

编写算法时&#xff0c;可能因为对自己代码的复杂度的不清晰而导致错失良机&#xff0c;对于普通的递推或者说循环的代码&#xff0c;仅用简单的调和级数或者等差数列和等比数列即可分析&#xff0c;但是对于递归的代码&#xff0c;简单的递归树法并不方便&#xff0c;理解并记…...

实例名不规范导致mds创建失败

概述 在部署ceph集群时&#xff0c;规划主机名、关闭防火墙、配置免密、关闭selinux&#xff0c;配置hosts文件这几步同样重要&#xff0c;都是初期部署一次麻烦&#xff0c;方便后续运维的动作。遇到过很多前期稀里糊涂部署&#xff0c;后续运维和配置时候各种坑。 近期遇到…...

OpenGL中的纹理过滤GL_NEAREST和GL_LINEAR

一、GL_NEAREST&#xff08;最近邻插值&#xff09; 1.1 原理 当需要从纹理中采样颜色时&#xff0c;GL_NEAREST模式会选择离采样点最近的纹理像素&#xff08;通常是最接近采样点的纹理元素的中心&#xff09;&#xff0c;并直接使用该像素的颜色值作为输出。这种模式不进行任…...

vue 性能优化

data 层级不要太深 data 层级太深会增加响应式监听的计算&#xff0c;导致页面初次渲染时卡顿。 合理使用 v-show 和 v-if 频繁切换时&#xff0c;使用 v-show无需频繁切换时&#xff0c;使用 v-if 合理使用 computed computed 有缓存&#xff0c;data 不变时不会重新计算&…...

互联网大厂ssp面经(操作系统:part1)

1. 什么是进程和线程&#xff1f;它们之间有什么区别&#xff1f; a. 进程是操作系统中运行的一个程序实例。它拥有独立的地址空间和资源&#xff0c;可以独立执行。 b. 线程是进程内的一个执行单元&#xff0c;一个进程可以包含多个线程。 c. 线程共享进程的资源&#xff0c;…...

Android Activity 启动涉及几个进程

Zygote进程: Zygote进程在Android系统启动时被初始创建&#xff0c;并且初始化了虚拟机&#xff08;Dalvik或ART&#xff09;&#xff0c;预加载了Android系统的核心类库。所有的Android应用进程都是通过fork()从Zygote进程派生出来的&#xff0c;这允许应用快速启动&#xff0…...

说说你对链表的理解?常见的操作有哪些?

一、是什么 链表&#xff08;Linked List&#xff09;是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的&#xff0c;由一系列结点&#xff08;链表中每一个元素称为结点&#xff09;组成 每个结点包括两个部分&…...

每天五分钟深度学习:逻辑回归算法的损失函数和代价函数是什么?

本文重点 前面已经学习了逻辑回归的假设函数,训练出模型的关键就是学习出参数w和b,要想学习出这两个参数,此时需要最小化逻辑回归的代价函数才可以训练出w和b。那么本节课我们将学习逻辑回归算法的代价函数是什么? 为什么不能平方差损失函数 线性回归的代价函数我们使用…...

llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署

文章目录 简介支持的模型列表2. 添加自定义数据集3. lora 微调4. 大模型 lora 权重&#xff0c;部署问题 参考资料 简介 文章列表&#xff1a; llama-factory SFT系列教程 (一)&#xff0c;大模型 API 部署与使用llama-factory SFT系列教程 (二)&#xff0c;大模型在自定义数…...

C语言游戏实战(11):贪吃蛇大作战(多人对战)

成果展示&#xff1a; 贪吃蛇&#xff08;多人对战&#xff09; 前言&#xff1a; 这款贪吃蛇大作战是一款多人游戏&#xff0c;玩家需要控制一条蛇在地图上移动&#xff0c;吞噬其他蛇或者食物来增大自己的蛇身长度和宽度。本游戏使用C语言和easyx图形库编写&#xff0c;旨在…...

腾讯测试岗位的面试经历与经验分享【一面、二面与三面】

腾讯两个月的实习一转眼就结束了,回想起当时面试的经过,感觉自己是跌跌撞撞就这么过了,多少有点侥幸.马上腾讯又要来校招了,对于有意愿想投腾讯测试岗位的同学们,写了一些那时候面试的经历和自己的想法,算不上经验&#xff0c;仅供参考吧! 一面 — —技术基础&#xff0c;全面…...

19年做网站/网拍外宣怎么推广

导语大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。欢迎加入社区。社区加入|原创12万字书等你领2020-12-14之前给大家整理了一篇中国仓储物流技术行业的发展简史图谱&#xff0c;其中有些错误。本次经同行的指点特此勘误更新。在此鸣谢南天凯玛王总、南…...

现实有有哪里学做网站的/星乐seo网站关键词排名优化

利用matplotlib进行可视化 1、Matplotlib 基本介绍 Matplotlib 是一个在 python 下实现的类 matlab 的纯 python 的第三方库,旨在用 python实现matlab 的功能,是python下最出色的绘图库。其风格跟 matlab 相似&#xff0c;同时也继承了 python 的简单明了。要使用matplotlib得…...

郑州网站建设微信小程序/营销型企业网站建设步骤

Maven下载与安装 1、下载1&#xff09;Maven的系统要求&#xff1a; Maven对内存和操作系统没有要求 Maven安装本身仅需大约10MB&#xff0c;本地仓库视使用情况有所不同 Maven3.3及以上版本需要JDK1.7及以上&#xff08;截至今日&#xff0c;Maven官网提供的最新版本为3.5.2&a…...

口碑好的网站开发公司电话/深圳网络营销推广招聘网

1. 问题描述&#xff1a; 假设现在有两个自然数 A 和 B&#xff0c;S 是 A ^ B 的所有约数之和。请你求出 S mod 9901 的值是多少。 输入格式 在一行中输入用空格隔开的两个整数 A 和 B。 输出格式 输出一个整数&#xff0c;代表 S mod 9901 的值。 数据范围 0 ≤ A&…...

有道云笔记 wordpress/自己做网站

亲爱的《烈焰手游》玩家&#xff1a;您们好!感谢大家从《烈焰》手游的支持与厚爱!为了给大家提供更加优质的游戏环境&#xff0c;感受更多的游戏乐趣&#xff0c;提高游戏的可玩性和互动性&#xff0c;应广大玩家的需求&#xff0c;我们将对部分服进行合服操作&#xff0c;以下…...

在网站图片源代码alt写入关键词后为什么不显示只显示title内容/曼联对利物浦新闻

static修饰符 修饰属性&#xff1a;静态的属性不属于任何对象&#xff0c;全类及其对象共用&#xff0c;可以用类名直接调用修饰方法&#xff1a;静态的方法可以直接用类名调用&#xff0c;和对象无关。静态方法只能访问静态成员和静态方法&#xff0c;非静态方法可以调用静态方…...