飞机游戏初步

2023-11-03

步骤

1:

创建 hellogame项目

tools->cocos2d-console->bin->shift+右键->在此处打开命令窗口->路径pythoncocos.py new hellogame –p com.game.hellogame -lcpp -d game

2:在gameScene.h中(第一个场景)

<pre name="code" class="cpp">#ifndef __GAME_SCENE_H__    <strong>//大写,与项目名字一样</strong>
#define __GAME_SCENE_H__

#include "cocos2d.h"
#include "SimpleAudioEngine.h"

using namespace CocosDenshion;

class <strong>GameScene </strong>: public cocos2d::Layer
{
public:
	
	static cocos2d::Scene* createScene();
	SimpleAudioEngine*Sound = SimpleAudioEngine::getInstance();
	
	virtual bool init(); <strong> //虚函数</strong>

   <strong>  //对cpp中的相对应函数进行调用</strong>
	void onBegin(cocos2d::Ref* pSender);

	
	CREATE_FUNC(<strong>GameScene</strong>);
};

#endif

;
 


3:在gameScene.cpp中

</pre><pre name="code" class="cpp">#include "HelloWorldScene.h"
#include"SimpleAudioEngine.h"
#include "GameScene.h"  <strong>  //必要的引用头文件</strong>

USING_NS_CC;

<strong>using namespace std;</strong>

Scene* GameScene::createScene()
{

	auto scene = Scene::create();

	auto layer = GameScene::create();

	scene->addChild(layer);

	return scene;
}

bool GameScene::init()
{

	if (!Layer::init())
	{
		return false;
	}

	Sound->playBackgroundMusic("bgm1.mp3", true);

	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();
	
	auto background = Sprite::create("back1.png", Rect(0, 0, 440, 664));
	background->setAnchorPoint(Vec2(0.5, 0.5));
	background->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));
	this->addChild(background);



	//按钮设置添加start和quit按钮,具体参考cocos的API:  MenuTest
	auto start = MenuItemFont::create("start", CC_CALLBACK_1(GameScene::onBegin, this));
	start->setTag(1);
	auto quit = MenuItemFont::create("quit", CC_CALLBACK_1(GameScene::onBegin, this));
	quit->setTag(2);
	auto menu = Menu::create(start,quit,nullptr);
	menu->alignItemsVertically();
	this->addChild(menu);
	menu->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2 - 150));

	

	return true;
}



void GameScene::onBegin(Ref* pSender)
{
	
	auto ss = (MenuItemFont*)pSender;
	int str = ss->getTag();
	if (str==1)
	{
		auto scene = HelloWorld::createScene();
		Director::getInstance()->replaceScene(scene);
	}
	else
	{
		Director::getInstance()->end();
	}
}

上面的是一个开始类的创建,后面的类的创建和这个类似,可以对照修改


4:在HelloWorldScene.cpp中(第二场景)

</pre><pre name="code" class="cpp">#include "HelloWorldScene.h"
#include"SimpleAudioEngine.h"
#include "Gamescene.h"
#include "Plane1.h"
#include "Bullet.h"


USING_NS_CC;

Scene* HelloWorld::createScene()
{
    
    auto scene = Scene::create();
   
    auto layer = HelloWorld::create();

    scene->addChild(layer);

    return scene;
}

bool HelloWorld::init()
{
    
    if ( !Layer::init() )
    {
        return false;
    }
    
    Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	Sound->playBackgroundMusic("bgm.mp3",true);

	//按钮设置添加start和quit按钮,具体参考cocos的API:  MenuTest
	/*auto start = MenuItemFont::create("start", CC_CALLBACK_1(HelloWorld::onStart, this));
	start->setName("start");
	auto quit = MenuItemFont::create("quit", CC_CALLBACK_1(HelloWorld::onStart, this));
	start->setName("quit");
	auto menu = Menu::create(start, quit, nullptr);
	menu->alignItemsVertically();
	this->addChild(menu);*/


	
	//加载图片,加载两张相同图片为了背景的上下移动交换
	auto background1 = Sprite::create("back.png");   
	auto background2 = Sprite::create("back.png");

	//设置Tag值的第一种方式,中间的0是层级
	this->addChild(background1,0,1);  
	this->addChild(background2,0,2);

	background1->setAnchorPoint(Vec2(0, 0));  //锚点设置
	//background1->setPosition(Vec2(visibleSize.width/2 , visibleSize.height/2));
	background2->setAnchorPoint(Vec2(0, 0));
	background2->setPosition(Vec2(0 , visibleSize.height));
	//background1->setTag(1);        //给图片设置随意的Tag值的第二种方式
	//background1->setTag(2);
	

	//退出按键
	auto quit = MenuItemFont::create("quit", CC_CALLBACK_1(HelloWorld::onStart, this));
	quit->setTag(2);
	auto menu = Menu::create(quit, nullptr);
	menu->alignItemsVertically();
	this->addChild(menu);
	menu->setPosition(Vec2(visibleSize.width/2+150, visibleSize.height/2+300));
	

	//计时器,具体参考API:schedule
	this-> schedule(CC_SCHEDULE_SELECTOR(HelloWorld::onLoad), 0.1f);

	//动态创建plane1.h类的对象
	Planes *p = new Planes;
	this->addChild(p,1,4);


	//动态创建Bullet.h类的对象
	Bullet *p1 = new Bullet;
	this->addChild(p1, 1, 3);

    return true;
}
//结合计时器
void HelloWorld::onLoad(float dt){
	//设置一个精灵b获取Tag值,从而获取background背景
	auto b1 = this->getChildByTag(1); 
	auto b2 = this->getChildByTag(2);

	//获取舞台大小
	Size visibleSize = Director::getInstance()->getVisibleSize();  

	//自己设置的锚点的位置以每0.5秒下移20的速度移动
	b1->setPositionY(b1->getPositionY() - 20);     
	b2->setPositionY(b2->getPositionY() - 20);

	//判断设置的锚点的位置与y轴的关系,此处是移动到y轴下方时
	if (b1->getContentSize().height + b1->getPositionY()<=0)   
	{
		b1->setPositionY(b1->getPositionY() + b1->getContentSize().height * 2);  
	}         //getPosition为图片的y轴,getContentSize为舞台的大小
	if (b2->getContentSize().height + b2->getPositionY() <= 0)   //判断设置的锚点的位置与y轴的关系,此处是移动到y轴下方时
	{
		b2->setPositionY(b2->getPositionY() + b2->getContentSize().height * 2);
	}
}

//按quit键时,切换为场景1;
void HelloWorld::onStart(Ref* pSender)
{
   // Director::getInstance()->end();
	auto dd = (MenuItemFont*)pSender;
	int str = dd->getTag();
	if (str == 2)
	{
		auto scene = GameScene::createScene();
		Director::getInstance()->replaceScene(scene);
	}

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}

5:在HelloWorldScene.h中

</pre><pre name="code" class="cpp">#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
#include "SimpleAudioEngine.h"

//根据API,使用音乐必须引用的代码
using namespace CocosDenshion;

class HelloWorld : public cocos2d::Layer
{
public:
  
    static cocos2d::Scene* createScene();
	SimpleAudioEngine*Sound = SimpleAudioEngine::getInstance();
    
    virtual bool init();
    
  
    void menuCloseCallback(cocos2d::Ref* pSender);

	//对void HelloWorld::onStart(Ref* pSender)函数的引用
	void onStart(cocos2d::Ref* pSender);

	void onLoad(float dt);
    
   
    CREATE_FUNC(HelloWorld); //注意和类名保持一致
};

#endif   // __HELLOWORLD_SCENE_H__

</pre><p><strong><span style="font-size:14px;"><span style="color:#ff0000;">6:主机类(Plane1.cpp)</span></span></strong></p><p><strong><span style="font-size:14px;"><span style="color:#ff0000;"></span></span></strong><pre name="code" class="cpp">#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include  "Plane1.h"

USING_NS_CC;
using namespace std;

//动态创建对象要在构造函数里面调用
Planes::Planes(){
	init();
}


bool Planes::init()
{

	if (!Layer::init())
	{
		return false;
	}

	//舞台
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	//主战机的出场和位置
	auto plane = Sprite::create("plane.png");
	this->addChild(plane, 1, 1);
	plane->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2-250));

	return true;
}

7:主机类(Plane1.h)

#ifndef __PLANE_SCENE_H__
#define __PLANE_SCENE_H__


#include "cocos2d.h"
#include "SimpleAudioEngine.h"
#include "GameScene.h"

using namespace CocosDenshion;

class Planes : public cocos2d::Layer
{
public:
	Planes();    //构造函数
	virtual bool init();

	
	//void onPlane(cocos2d::Ref* pSender);


	CREATE_FUNC(Planes);
};

#endif

8:子弹类(Bullet.cpp)

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include  "Bullet.h"

USING_NS_CC;
using namespace std;

//动态创建对象要在构造函数里面调用
Bullet::Bullet(){
	init();
}


bool Bullet::init()
{

	if (!Layer::init())
	{
		return false;
	}
	//获取舞台大小和图片素材的原点坐标
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	//计时器
	this->schedule(CC_SCHEDULE_SELECTOR(Bullet::onFly), 0.2f);

	return true;
}

//配合计时器,子弹的发射(MoveTo,MoveBy)
void Bullet::onFly(float bt){
	//获取舞台大小
	Size visibleSize = Director::getInstance()->getVisibleSize(); 
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	//子弹的出场,位置还有移动
	auto bullet = Sprite::create("bullet1.png");
	//子弹的声音
	Sound->playBackgroundMusic("bgm3.wav");
	this->addChild(bullet, 1);
	bullet->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2 - 245));
	auto mv = MoveBy::create(1, Vec2(0, visibleSize.height));
	bullet->runAction(mv);
}

9:子弹类(Bullet.h

#ifndef __BULLET_SCENE_H__
#define __BULLET_SCENE_H__


#include "cocos2d.h"
#include "SimpleAudioEngine.h"  //使用声音需要引用的

#include "GameScene.h"    //子弹是在第二场景中的,所以引用

using namespace CocosDenshion; <span style="color: rgb(255, 0, 0);font-size:14px;"></span><pre name="code" class="cpp">         //使用声音需要引用的
class Bullet : public cocos2d::Layer{public:Bullet(); //构造函数virtual bool init();

 


	//cpp文件中有参数的函数的申明
	void onFly(float bt);

	static cocos2d::Scene* createScene();
	SimpleAudioEngine*Sound = SimpleAudioEngine::getInstance();

	CREATE_FUNC(Bullet);
};

#endif










本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

飞机游戏初步 的相关文章

  • C语言写游戏——扫雷

    实现效果比较简陋 如图 写游戏需要不同的文件构成 首先看一下资源管理器清楚框架结构 在test c文件里编写整个游戏的运行逻辑 具体代码 define CRT SECURE NO WARNINGS 1 include game h 测试游戏
  • 【Python小游戏】当当当当 万众瞩目得《滑雪大冒险》来啦~(附源码)

    前文 大家好 我是梨子同学 希望大家多多支持我 哈哈 为了感谢每一个关注我的小可爱 每篇文章的项目源码都是无偿分享滴 见文末 很多csdn的功能还在研究中 还有小编的文笔不好勿怪 会慢慢进步跟大家一起学习的 小编也一直在学习编程 如果代码小
  • 潜艇来袭(Qt官方案例-2维动画游戏)

    一 游戏介绍 1 开始界面 启动程序 进入开始界面 2 开始新游戏 点击菜单 File New Game 或者Ctrl N 进入新游戏 开始新游戏之后 会有一个海底的潜艇 和水面舰艇对战 计算机 自动控制潜艇 海底潜艇会隔段时间发射一枚鱼雷
  • LUA中判断GameObject是否被Destory

    function IsNil uobj return uobj nil or uobj Equals nil end 你懂的 转载于 https www cnblogs com vsirWaiter p 7884249 html
  • 游戏引擎:打造梦幻游戏世界的秘密武器

    介绍 游戏引擎是游戏开发中不可或缺的工具 它为开发者提供了构建游戏世界所需的各种功能和工具 本文将介绍游戏引擎的概念 使用方法以及一个完整的游戏项目示例 游戏引擎的概念 游戏引擎是一种软件框架 它提供了游戏开发所需的各种功能和工具 包括图形
  • 【Unity Shader】屏幕后处理1.0:调整亮度/饱和度/对比度

    1 Unity中实现屏幕特效的基本步骤 什么叫屏幕后处理 Screen post processing effects 渲染完整个场景得到屏幕图像后对图像进行一系列操作 实现各种屏幕特效 这一步我们可以添加很多例如景深 Depth of F
  • 想去游戏公司做游戏,最重要的是什么素养?

    首先 要学会沟通 话说 动过去游戏公司的念头 做游戏 感觉很酷 但是 想想自己一不会编程 二不会画画 做策划 那好像是两边受气里外不是人出事第一个背锅的角色 想想也就想想 不过正好前些天我们发过一篇讲去日本学游戏的文章 说不定能派上用场 前
  • Bridge Champ举办人机对战赛:NFT游戏与传统竞技共生发展编织新格局

    概要 现在 NFT与体育竞技正日益紧密地联系在一起 一些体育项目开始推出与赛事或球队相关的NFT 同时也有部分NFT游戏开始举办电子竞技赛事 这种共生发展正在改变体育竞技的生态 笔者采访了桥牌冠军项目相关负责人 探讨NFT游戏与传统体育竞技
  • 程序员升职记 全关卡攻略&通俗思路 Human Resource Machine

    程序员升职记 全过关方法 通俗思路 博主本着能过就过的思想 写出的解答必然不是最优解 但是可以给大家提供一点思路来参考 其中17和22的解答整理自网络 特别是17的解答 要比博主的原解答巧妙不少 1 收发室 模拟程序输入输出 HUMAN R
  • 俄罗斯方块游戏(C语言)

    简介 俄罗斯方块 Tetris 是一款经典的游戏 下面是用C语言实现俄罗斯方块的示例代码 code include
  • python趣味编程-使用 Python 的 Tron 游戏(多人游戏)

    使用 Python 的 Tron 游戏 多人游戏 和免费源代码 带有源代码的Tron Game 多人游戏 是一款多人游戏 您的目标是创建更长的线 你只需要小心移动 tron 车辆即可 该项目的目的是为您的亲戚和朋友提供一些娱乐因素 关于该项
  • Metasequoia4 for Mac/win:带您进入三维模型游戏建模的新世界!

    在当今游戏行业中 三维模型的重要性无可置疑 而在这个充满创造力和无限可能的领域中 Metasequoia4 简称M4 无疑是您的最佳选择 作为一款专业的三维模型游戏建模软件 M4凭借其强大的功能和简便易用的界面 成为了无数游戏开发者和设计师
  • Metasequoia4 for Mac/win:带您进入三维模型游戏建模的新世界!

    在当今游戏行业中 三维模型的重要性无可置疑 而在这个充满创造力和无限可能的领域中 Metasequoia4 简称M4 无疑是您的最佳选择 作为一款专业的三维模型游戏建模软件 M4凭借其强大的功能和简便易用的界面 成为了无数游戏开发者和设计师
  • 收单外包服务机构的评级工作已经开始了!

    评级收单外包服务机构的工作不仅是金融监管部门规范和引导收单外包服务市场的重要举措 也影响着外包机构的业务发展 并且是每年最重要的合规工作之一 中国支付清算协会于2023年12月18日发布了一份关于进行2023年度收单外包服务机构评级工作的通
  • 计算机提示vcruntime140.dll丢失的解决方法,多种修复教程分享

    vcruntime140 dll是一个非常重要的动态链接库文件 它包含了许多运行时的函数和类 然而 有时候我们可能会遇到vcruntime140 dll无法继续执行代码的问题 这会给我们带来很大的困扰 那么 这个问题是什么原因导致的呢 又应
  • 如何有效获取APP新增用户

    在提升APP用户获取效果方面 有几个关键策略可以考虑 市场定位与目标用户明确 在推广过程中 确保清晰地了解你的目标用户是谁 以便有针对性地开展推广活动 对用户的需求和偏好有深入了解 可以更好地制定吸引用户的策略 引人入胜的营销策略 设计有吸
  • 盘点第三方支付行业中一些“专用术语”

    每个行业都有自己的行业术语 在官方场合被称为 术语 如果你是支付行业的新手 或者正在努力深入了解这个复杂但充满机遇的领域 那么掌握行业术语就是打开这扇门的关键 支付系统的需求文档和技术方案文档都充斥着专业词汇和行业术语 有些词汇容易理解 有
  • 广告竞价策略:激发广告变现潜能的关键

    在数字化时代 广告已经成为企业推广品牌 产品和服务的关键手段之一 为了最大程度地发挥广告的效果 广告竞价策略成为广告主和数字营销专业人士关注的焦点 通过巧妙运用竞价策略 广告主可以在激烈的市场竞争中脱颖而出 实现广告变现的潜能 admaoy
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 案例研究:YGG 如何通过 GAP 帮助 Pixels 扩大玩家群体

    在 Sky Mavis 联合创始人 Jeffrey Jihoz Zirlin 在 YGG Web3 游戏峰会 W3GS 上发表主题演讲时 他向在场的人们透露 MMO 农场游戏 Pixels 的日活跃用户数已经超过了 130 000 人 这使

随机推荐

  • DGL学习笔记03-消息传递机制

    DGL学习笔记03 消息传递机制 1 什么是消息传递 举个简单的例子 1 什么是消息传递 什么是消息传递机制 首先来看下官方的解释 也可以去看论文 对于这一节的话 我感觉如果没接触过Message Passing的人可能看了官方文档也不太容
  • 文件系统FATFS使用 总结

    最近在使用FATFS 现将使用的方法记录下来 f open 函数 此函数用来打开或创建文件 重点 是这个函数的最后一个参数所代表的访问的模式 例子 state f open mfileinfo bmp name FA WRITE FA RE
  • Socket 关于设置Socket连接超时时间

    做网络编程的人对setSoTimeout方法一定很熟悉 都知道是设置连接的超时时间 但是我在网上找资料时发现很多人把这个超时时间理解成了链路的超时时间 我看了一下JDK 关于这个方法的说明 其实根本不是链路的超时时间 Java代码 setS
  • Android ImageView使用详解(系列教程三)

    目录 一 ImageView简介 二 ImageView基本使用 三 ImageView常用属性 四 几种图片的加载方法 五 ImageView的缩放类型 一 ImageView简介 ImageView是Android开发中最常用的组件之一
  • 华为OD机试 Python 报数问题

    描述 你和你的朋友们围成一个圈玩游戏 从第一个人开始 依次报数 1 2 3 当数到3的时候 那个人就得退出游戏 然后从他的下一个朋友继续开始 1 2 3 同样的 数到3的人又得退出 这样一直进行下去 直到圈里只剩下一个人 人会是谁 任务 给
  • 华为OD机试真题 Java 实现【Linux 发行版的数量】【2023Q1 100分】

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 1 输入 2 输出 3 说明 一 题目描述 Linux 操作系统有多个发行版 distrowatch com 提供了各个发行版的资料 这些发行
  • 集合转换为Jsoin存入redis

    重温复习redis 要将对象集合存入redis作为缓存 上网找了个json串转集合的工具类 这里记录一下 import java io IOException import java util ArrayList import java u
  • js获取input上传文件的文件名和扩展名的方法

  • WLAN配置

    SW1 sysname SW1 修改名称 undo info center enable 关闭提示 vlan batch 100 to 102 批量创建vlan 100 101 102 interface GigabitEthernet0
  • Ethereum geth 同步区块的三种模式

    Ethereum 以太坊 当前交易多 截止当前 2018 02 04 已经有5029238个区块 区块大小在150G左右 如果全部同步 并且严格逐个验证 需要太多的时间和计算 作者曾经用一台实体机 8核 16GB内存 2TB机械硬盘的del
  • leetcode1921.消灭怪物的最大数量(中等)

    解法 排序 贪心 具体 计算出每个怪物到达城市的时间 然后排序 class Solution public int eliminateMaximum vector
  • 深度学习论文笔记(可解释性)——CAM与Grad-CAM

    文章目录 主要工作 Global Average Pooling的工作机制 CAM Grad CAM 主要工作 CAM与Grad CAM用于解释CNN模型 这两个算法均可得出 c l a s s
  • 【JVM】Java垃圾回收机制(GC)详解

    Java垃圾回收机制 GC 详解 一 为什么需要垃圾回收 如果不进行垃圾回收 内存迟早都会被消耗空 因为我们在不断的分配内存空间而不进行回收 除非内存无限大 我们可以任性的分配不回收 但是事实并非如此 所以 垃圾回收是必须的 二 哪些内存需
  • 【kali】kali环境下安装dvwa

    STEP1 从github下载dvwa git clone https github com ethicalhack3r DVWA Q 我要自己安装git吗 A kali不用啦 一般都自带有 但是普通的ubuntu和debian上是没有的哦
  • Eclipse4.3 swt 插件在线安装

    到eclipse官网下载swt插件 1 点击该网站主菜单 Downloads gt Project 在出现的插件列表中找到 WindowBuilder 并点击 出现如下网页 复制该链接地址 当然该网页讲的就是如何安装swt designer
  • MATLAB地理数据处理 25:植被物候提取及分析模型优化(Savitzky-Golay)

    物候提取模型优化 1 前提 2 MATLAB代码 1 前提 之前我写过一篇使用Savitzky Golay处理遥感数据 获取地面物候信息的MATLAB代码 Python地理数据处理 十七 植被物候提取和分析 Savitzky Golay 但
  • MySQL数据表的约束

    数据表约束 对于某一列的值能添加哪些内容做了一定的限制 这种限制的手段就称为约束 一 约束的类型 NOT NULL 指示某列不能存储 NULL 值 UNIQUE 保证某列的每行必须有唯一的值 DEFAULT 规定没有给列赋值时的默认值 PR
  • Visual Studio 2022编译CMake工程

    用VS2022打开CMakeLists txt文件所在的文件夹 配置缓存 生成完毕 选择启动项 调试启动 运行输出 进入CMake项目视图 启动参数设置 增加args
  • Dll 编程入门指南

    我正在 学习 DLLs 谈不上对其有什么高屋建瓴的见解 本文只是 通过 编码让你看到并想知道代码是如何运行的 在本文中 我假定你知道如何使用你的编译器特性 比如设置目录路径等等 为了建立项目 请选择Win32 控制台项目 Win32 Con
  • 飞机游戏初步

    步骤 1 创建 hellogame项目 tools gt cocos2d console gt bin gt shift 右键 gt 在此处打开命令窗口 gt 路径pythoncocos py new hellogame p com gam