飞机游戏初步

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(使用前将#替换为@)

飞机游戏初步 的相关文章

  • 【unity3D】创建TextMeshPro(TMP)中文字体(解决输入中文乱码问题)

    未来的游戏开发程序媛 现在的努力学习菜鸡 本专栏是我关于游戏开发的学习笔记 本篇是unity的TMP中文输入显示乱码的解决方式 创建 TextMeshPro 中文字体 遇到的问题描述 解决方式 Font Asset Creator 面板扩展
  • 潜艇来袭(Qt官方案例-2维动画游戏)

    一 游戏介绍 1 开始界面 启动程序 进入开始界面 2 开始新游戏 点击菜单 File New Game 或者Ctrl N 进入新游戏 开始新游戏之后 会有一个海底的潜艇 和水面舰艇对战 计算机 自动控制潜艇 海底潜艇会隔段时间发射一枚鱼雷
  • Unity小游戏-勇闯小岛(PC) 项目展示+完整项目源码

    游戏录像 游戏玩法 主角可以变换四种状态 玩家通过四种状态特有的技能来击败眼前的怪物闯关 切换到棕色 有一个一直围绕自己旋转的大摆斧攻击敌人 切换到绿色 可以抵挡一切的投掷物 但是无法攻击敌人 切换到粉色 切换瞬间可以发出飞镖 切换到蓝色
  • 月薪1000到游戏创业赚百万,程序员到自媒体达人,他是怎么做到的?

    深圳雷哥 一位8年游戏开发经验的程序员游戏创业赚了百万从程序员转战自媒体写作与职场教练目前副业每月收入高达4K全网粉丝2 万 预计年底破5万下面来听听雷哥的传奇故事 希望对大家有所启发和帮助 01 我的学生时代 我叫雷巍 今年32岁 来自湖
  • 第一篇:PyGame小游戏——2D迷宫游戏(16W字详解)

    目录 在开头的开场白 在CSDN看到一篇 利用深度优先算法自动生成随机迷宫 的blog 突发灵感 就想做这个迷宫游戏 本文大部分讲的意思 而非代码 文章最后会展示最终代码和图片的 读者不用过多地注意那些 本文是作者第一次写blog 难免有些
  • Bridge Champ举办人机对战赛:NFT游戏与传统竞技共生发展编织新格局

    概要 现在 NFT与体育竞技正日益紧密地联系在一起 一些体育项目开始推出与赛事或球队相关的NFT 同时也有部分NFT游戏开始举办电子竞技赛事 这种共生发展正在改变体育竞技的生态 笔者采访了桥牌冠军项目相关负责人 探讨NFT游戏与传统体育竞技
  • 投资捕鱼游戏市场的如何避雷?以及研发技术问题。

    随着国内捕鱼市场在姚记科技 波克城市 途游等捕鱼龙头的深耕下 整个产品的研发 运营门槛都了非常大的提高 对于目前想要研发出一款具有竞争力的产品和版本 投入低于500万的资金很难出有竞争力的产品 加上运营门槛的提高 运营成本至少需要准备500
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • 「Bomkus 博士的试炼」排行榜规则更新

    亲爱的玩家们 为了回应我们从社区收到的宝贵反馈 我们希望与大家分享我们为防止在 Bomkus 博士的试炼 排行榜中作弊而采取的措施的最新进展 并就这一主题提供更多说明 除了在活动开始前采取的反作弊措施外 我们还根据观察到的和报告的行为在整个
  • 《开箱元宇宙》:Madballs 解锁炫酷新境界,人物化身系列大卖

    你是否曾想过 元宇宙是如何融入世界上最具代表性的品牌和名人的战略中的 在本期的 开箱元宇宙 系列中 我们与 Madballs 的战略顾问 Derek Roberto 一起聊聊 Madballs 如何在 90 分钟内售罄 2 000 个人物化
  • 游戏弹窗找不到emp.dll怎么办?分享5个靠谱的解决方法

    在现代的游戏世界中 我们经常会遇到各种各样的问题 其中 最常见的问题之一就是 无法找到emp dll 或 emp dll丢失 那么 emp dll到底是什么 它有什么作用 为什么会出现丢失的情况呢 不用担心 本文将从这几个方面进行详细解析
  • 微信游戏如何开发

    中懿游游戏软件开发 微信游戏开发通常涉及使用微信小游戏平台进行开发 微信小游戏是一种在微信平台上运行的轻量级游戏 用户可以在微信中直接体验 无需下载安装 以下是在微信平台上开发小游戏的一般步骤 1 注册微信开发者账号 访问 微信开放平台 注
  • 利用阿里云的尖端数据库解决方案增强游戏数据管理

    在快节奏和动态的游戏世界中 对于努力为玩家提供无缝体验的公司来说 管理大量数据是一项关键挑战 阿里云是亚太地区的主要参与者 也是全球公认的运营数据库管理系统领导者 提供量身定制的创新解决方案 以应对游戏公司面临的独特数据管理挑战 这篇博客探
  • 坦克大战(二)

    欢迎来到程序小院 坦克大战 二 玩法 键盘 A W S D 键来控制方向 空格键发射子弹 N 下一关 P 上一关 Enter 开始 赶紧去闯关吧 开始游戏 https www ormcc com play gameStart 221 htm
  • Metasequoia4 for Mac/win:带您进入三维模型游戏建模的新世界!

    在当今游戏行业中 三维模型的重要性无可置疑 而在这个充满创造力和无限可能的领域中 Metasequoia4 简称M4 无疑是您的最佳选择 作为一款专业的三维模型游戏建模软件 M4凭借其强大的功能和简便易用的界面 成为了无数游戏开发者和设计师
  • Counter-strike 2游戏网站网页制作设计 基于html+css 使用HTML+CSS+JavaScript完成以下任务: 1.使用WebStorm建立和管理个人网站; 2.熟练使用CSS结

    Counter strike 2游戏网站网页制作设计 基于html css Counter strike 2游戏网站网页制作设计 基于html css网页项目的设计与实现 https www bilibili com video BV1Kw
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接
  • 2024年华为OD机试真题-虚拟游戏理财-Python-OD统一考试(C卷)

    题目描述 在一款虚拟游戏中生活 你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局 现有一家Bank 它提供有若干理财产品m 风险及投资回报不同 你有N 元 进行投资 能接受的总风险值为X 你要在可接受范围内选择最优的投资方式获得最大回报

随机推荐

  • 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