【一】仿微信飞机大战cocos2d
参考 【偶尔e网事】 的 【cocos2d-x入门实战】微信飞机大战 cocos2dx 2.0版本, 偶尔e网事他 写的非常详细,面面俱到,大家非常有必要看下。可以通过下面链接跳转: cocos2d-x入门实战 这里面我以 【cocos2d-x入门实战】微信飞机大战为蓝本,用cocos2dx 3.0r
参考 【偶尔e网事】 的 【cocos2d-x入门实战】微信飞机大战 cocos2dx 2.0版本,偶尔e网事他写的非常详细,面面俱到,大家非常有必要看下。可以通过下面链接跳转:
cocos2d-x入门实战
这里面我以【cocos2d-x入门实战】微信飞机大战 为蓝本,用cocos2dx 3.0rc1翻版。安装环境什么的,我就不说了,网上都可以找到,我直接从游戏开始界面说起。
想往下看的话,你必须会的一件事,就是你已经能创建出cocos2dx3.rc1的helloworld工程。
飞机大战源码和资源放在第四节中,不想看的直接去第四节中找吧
打飞机是一项需要前戏的运动,所以我们加个欢迎界面什么的,搞搞前戏气氛,还是很有必要的。
下面就让我们完成前戏,该做的事情:
1.游戏开始界面
一、首先是开始欢迎界面的展示
这里我们实现了简单静态界面,以及一个炫酷的动态图,虽然只是三秒钟!,我这里直接用了偶尔e网事大神的资源,大神请原谅我把你的飞机升级成3.0版本的,如果不爽,请过来打我~好吧,我好jian.....
二、初始工程的介绍
假设你已经创建了一个名为“PlayThePlane”的工程,那么你的解决方案将会是这样的:
工程是从main.cpp开始执行的:
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance);// UNREFERENCED_PARAMETER 告诉编译器,已经使用了该变量,不必检测警告! UNREFERENCED_PARAMETER(lpCmdLine); // 要是没加,应该会有这个“warning C4100: “lpCmdLine” : unreferenced formal parameter.” // create the application instance 创建应用实例 AppDelegate app; return Application::getInstance()->run();// cocos2dx AppDelegate程序正式开始运行 }
bool AppDelegate::applicationDidFinishLaunching() { // initialize director 导演 auto director = Director::getInstance(); // 窗体框架 auto glview = director->getOpenGLView(); if(!glview) { glview = GLView::createWithRect("PlayerThePlane", Rect(0, 0, 480, 800)); // 窗体名 + 宽高规格 director->setOpenGLView(glview); // 1.LOOK 该函数会自动按设计宽高和缩放方式适应手机屏幕,设置游戏分辨率 (设计宽,设计高,缩放方式)。 glview->setDesignResolutionSize(480, 800, kResolutionNoBorder); } // turn on display FPS 打印帧率,不希望左下角三行出现的 就注释掉 或者设置false director->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this 一秒60帧 director->setAnimationInterval(1.0 / 60); // create a scene. it's an autorelease object 创建场景 auto scene = HelloWorld::createScene(); // run 导演让场景开始运作 director->runWithScene(scene); return true; }
这里我们修改和添加的东西有:
glview = GLView::createWithRect("PlayerThePlane", Rect(0, 0, 480, 800)); 我们设置了我们飞机的名字,和容纳的空间
glview->setDesignResolutionSize(480, 800, kResolutionNoBorder);
注释很清楚,就不再解释了。
auto scene = HelloWorld::createScene();这个就是我们的开始场景,auto是c++11的特性。触景生情,好的场景,会让人情不自禁的想把这个飞机打下去,所以我们有必要要让场景炫起来。
director->runWithScene(scene);把scene场景交给导演来运作
三、游戏开始界面的具体实现
我们先看下HelloWorldScene.h代码:
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::Layer { public: // 产生一个场景,然后把本Layer层类加入到场景中去 static cocos2d::Scene* createScene(); // 在Layer层中添加精灵元素 virtual bool init(); // a selector callback 退出按钮回调 void menuCloseCallback(cocos2d::Ref* pSender); // 它的具体实现其实就是HelloWorld::create(),你进入CREATE_FUNC宏定义可以看到 CREATE_FUNC(HelloWorld); public: void loadingDone(Node* pNode); // 从开始界面 跳到游戏界面 void PreloadMusicAndPicture(); // 预加载音乐和图片 }; #endif // __HELLOWORLD_SCENE_H__
#include "HelloWorldScene.h" #include "SimpleAudioEngine.h" USING_NS_CC; Scene* HelloWorld::createScene() { // 创建一个自动释放的场景 auto scene = Scene::create(); // 创建一个自动释放的layer层 auto layer = HelloWorld::create(); // 场景中加入layer层 scene->addChild(layer); // 返回场景 return scene; } // on "init" you need to initialize your instance bool HelloWorld::init() { // 当你想调用父类的virtual,又想有自己的实现的时候,就这么写 if ( !Layer::init() ) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Point origin = Director::getInstance()->getVisibleOrigin(); // 创建退出按钮 auto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 , origin.y + closeItem->getContentSize().height/2)); auto menu = Menu::create(closeItem, NULL); menu->setPosition(Point::ZERO); this->addChild(menu, 1); ///////////////////////////// // 3. add your codes below... // add a label shows "Hello World" // create and initialize a label // 下面的代码去掉,加入自己的代码 // 返回OpenGL视图的大小 Size winSize=Director::getInstance()->getWinSize(); // 预加载图片和音乐 PreloadMusicAndPicture(); // 背景图(精灵) auto background = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("background.png")); background->setPosition(Point(winSize.width/2,winSize.height/2)); // 设置位置 // 场景中加入背景图 this->addChild(background); // 加入copyright图片(精灵) auto copyRight = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("shoot_copyright.png")); copyRight->setAnchorPoint(Point(0.5, 0)); // 描点 copyRight->setPosition(Point(winSize.width/2,winSize.height/2)); this->addChild(copyRight); // 加入loading图片(精灵) auto loading = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading1.png")); loading->setPosition(Point(winSize.width/2,winSize.height/2)); this->addChild(loading); // Animation是由许多精灵帧组成,可以设置间隔时间,持续时间等,它实际上是包含着一组数据 Animation* animation=Animation::create(); animation->setDelayPerUnit(0.2f); // 间隔时间 animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading1.png")); animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading2.png")); animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading3.png")); animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading4.png")); // 通过帧数据创建帧动作(创建序列帧动画) Animate* animate=Animate::create(animation); Repeat* repeat=Repeat::create(animate,3); // 重复一个动作的次数 CallFuncN* repeatdone=CallFuncN::create(CC_CALLBACK_1(HelloWorld::loadingDone, this)); // 创建回调函数 CC_CALLBACK_1 代表一个参数 Sequence* sequence=Sequence::create(repeat, repeatdone, NULL);// 让多个动作按照前后顺序逐一执行 repeatdone 放在 repeat前的话,就不会播放执行3次序列帧的动画 loading->runAction(sequence); // 执行上述动画 this->setKeypadEnabled(true); // 设置监听Android的按键,如返回键、菜单键、Home键等。 return true; } void HelloWorld::menuCloseCallback(Ref* pSender) { Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0); #endif } void HelloWorld::PreloadMusicAndPicture() { //png加入全局cache中 plist存储了 SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ui/shoot_background.plist"); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ui/shoot.plist"); // 音效 CocosDenshion::SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound/background-music1.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/bullet.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/enemy1_down.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/enemy2_down.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/enemy3_down.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/game_over.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/get_bomb.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/get_double_laser.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/use_bomb.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/big_spaceship_flying.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/achievement.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/out_porp.mp3"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sound/button.mp3"); // 背景音乐 CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/game_music.mp3",true); } void HelloWorld::loadingDone( Node* pNode ) { }
路径
预加载的路径是项目路径下的Resources文件夹
这个是我的工程资源路径:E:\studyCocos2dx3.0RC1\PlayThePlane\Resources
如:SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ui/shoot_background.plist");
其实就是SpriteFrameCache::getInstance()->addSpriteFramesWithFile("E:/studyCocos2dx3.0RC1/PlayThePlane/Resources/ui/shoot_background.plist");
图片加载
我们的图片是用TexturePacker工具把若干图片打包生成的一张总的png和plist,plist保存着png图片中的各个数据,比如名字大小什么的。当然你也可以不用这种整合的,那么加载图片的方式就改变了,比如背景图的加载:
// 背景图(精灵) auto background = Sprite::create("ui/shoot_background/background.png"); background->setPosition(Point(winSize.width/2,winSize.height/2)); // 设置位置 // 场景中加入背景图 this->addChild(background);
音乐加载
预加载中,有一个不是预加载,而是直接加载开启的:
CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/game_music.mp3",true);这个是直接把开启了背景音乐。
图片动画效果以及游戏开始的回调
CallFuncN* repeatdone=CallFuncN::create(CC_CALLBACK_1(HelloWorld::loadingDone, this)); // 创建回调函数 CC_CALLBACK_1 代表一个参数 Sequence* sequence=Sequence::create(repeat, repeatdone, NULL);// 让多个动作按照前后顺序逐一执行 repeatdone 放在 repeat前的话,就不会播放执行3次序列帧的动画 loading->runAction(sequence); // 执行上述动画
好了,到这里就完成了所谓的游戏开始前的界面。下次说什么我也不知道,写什么,说什么吧。
我看了下我的排版,着实奇怪,有时候行和行间距离很近,有时候很远。而且怎么设置字体啊,我想一开始就是小型字体,而不是每次写完一段,再手动去改。
大家有什么不懂得,可以直接问我(不要问的太深入~),我也是刚开始学cocos2dx,大家一起学习。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











11월 11일, 준야오항공은 '겐신 임팩트'가 첫 비행에 성공했다고 발표하고, 준야오 항공×겐신 임팩트를 테마로 한 주변 상품도 출시했다. 이러한 주변 제품에는 1:150 스케일로 제작된 787 항공기 모델, '원신 임팩트' 3주년 협력 여권 가방, 3주년 기념 비행 담요 등이 포함됩니다. 당사 웹사이트에서는 '원신 임팩트'가 날아갈 것이라고 언급했습니다. 2023. 2024년 11월 8일부터 11월 8일까지 항공기 유형은 보잉 787-9 광동체 항공기로 비즈니스석 29석, 이코노미석 295석을 갖추고 있습니다. 티켓 구매 방법: 준야오 항공 앱을 열고 홈페이지에서 "원신 임팩트 3주년" 상단 사진을 클릭하세요. "원신 임팩트 3주년 테마 비행" 랜딩 페이지로 이동하여 예정된 "원신 임팩트" 항공편을 확인하세요. 출발 시간을 선택하고 '예약'을 클릭하세요. 첫 번째 항공편의 항공권 구매 페이지로 이동하세요.

1월 6일 본 사이트의 소식에 따르면, 중국남방항공과 중국동방항공은 항공기 모델 변경으로 인해 여행을 할 수 없게 되거나 항공편 변경 등의 요인을 포함한 항공권 취소 및 변경 규정 조정에 대한 공지를 잇달아 발표했습니다. 노선 변경 및 항공편 경유지 지연 범위를 조정하는 동시에 질병으로 인한 취소 규정을 완화합니다. 이 규정은 베이징 시간으로 2024년 1월 10일 0시부터 적용됩니다. 중국남방항공은 다음과 같은 조정을 실시했습니다. 여행을 방해하는 항공기 기종 변경, 항공편 중지 지연, 공항 환승, 불가항력 및 기타 요인 등의 요인을 포함하도록 무료 항공권 환불 및 변경 범위를 확대했습니다. 질병으로 인한 취소 및 환불 규정 완화 1. 질병으로 인해 여행을 할 수 없는 승객은 중국남방항공이 보유한 국내 및 국제 항공권에 대해 질병으로 인해 변경 또는 환불을 신청할 수 있습니다. 2. 질병으로 인한 취소 증빙서류는 납부서 또는 입원예치금증명서(둘 중 택1)로 조정

11일 본 웹사이트의 소식에 따르면 사우스웨스트항공의 한 임원은 보잉 737 MAX7 항공기가 2024년 4월 미국 연방항공청(Federal Aviation Administration)의 인증을 받고 10월부터 11월까지 운항을 시작할 것이라고 밝혔다. 이 사이트는 사우스웨스트 항공이 지난 달 추가 108대의 MAX7 항공기에 대한 신규 주문을 발표했으며 이 항공기는 2031년 이전에 인도될 것으로 예상된다는 점을 알렸습니다. 그러나 항공기 배송 일정은 미국 연방항공청(FAA)의 인증에 따라 달라지며, 인증 지연으로 인해 수십 개의 MAX7 주문이 MAX8로 전환될 수밖에 없었습니다. 목요일 밤, 사우스웨스트 항공의 최고 운영 책임자(COO)인 앤드루 와터슨(Andrew Watterson)은 인터뷰에서 다음과 같이 말했습니다.

이 웹사이트는 1월 21일 항공 산업 일반 항공이 차세대 국내 소형 훈련기 "Lingyan" AG100의 첫 번째 배치를 진행했다고 보도했습니다. 첫 번째 배치는 허난 뉴 실크로드 항공 학교와 주하이 AVIC 비행 학교에 전달되었습니다. 이 웹사이트에서는 "Lingyan" AG100 항공기가 Aviation Industry General Aviation에서 독자적으로 개발한 차세대 국내 생산 민간 기본 훈련기로서 비행 훈련의 효율성을 높이기 위해 3인승 보조 훈련 기능을 도입했다고 밝혔습니다. 승무원과 승객의 안전을 최대한 보장하기 위한 자동 운전 시스템과 낙하산 착륙 시스템을 갖추고 있으며, 전체 항공기는 저가형 복합 재료 설계 및 제조 기술을 채택하고 있습니다. 동시에 AG100에는 최신 ROTAX915is 엔진이 장착되어 있어 자동차 휘발유를 사용하여 연료 보안을 촉진하고 교육 비용을 절감할 수 있습니다.

이 웹사이트는 7월 22일 판버러 에어쇼를 앞두고 보잉이 2024년 민간항공시장전망(CMO)을 발표해 2043년까지 전 세계 항공사들이 약 4만4000대의 새로운 민간 항공기를 필요로 할 것이라고 예측했다고 보도했다. 항공 여행이 완전히 회복됨에 따라 향후 20년 동안 최신 항공기 인도는 작년 예측보다 3% 증가했습니다. 또한 전망에서는 신흥 시장과 글로벌 단일 통로 시장 수요가 계속해서 민간 항공 산업의 주요 성장 동력이 될 것으로 예측합니다. CMO에 따르면 항공여객 수송량은 2023년 대비 향후 20년간 연평균 4.7% 증가할 것으로 예상된다. 향후 20년 동안 CMO 예측의 주요 내용은 다음과 같습니다. 전 세계 민간 항공기는 연간 3.2%씩 성장할 것으로 예상됩니다. 이는 항공사가 지속적으로 탑승률을 높이고 일일 항공기 수를 늘리기 때문에 항공 교통보다 느린 성장률입니다.

에어버스 항공기 전체 수명주기 서비스 센터(Airbus Aircraft Full Life Cycle Service Center)가 오늘 운영에 들어가 항공기 전체 수명주기 관리를 위한 솔루션을 제공할 것이라고 발표했습니다. 센터는 중국 쓰촨성 청두에 위치하고 있습니다. 보도에 따르면, Airbus 항공기 전체 수명주기 서비스 센터는 최초의 원스톱 서비스 센터로서 다양한 항공기 모델을 중심으로 항공기 보관 및 보관부터 유지보수, 업그레이드, 개조, 해체, 재활용 및 분해에 이르기까지 사업 범위를 포괄할 예정입니다. 중고항공용품 유통사업을 해산하였습니다. 서비스 센터는 유럽항공안전청(EASA)과 중국민간항공청으로부터 관련 인증을 획득했으며, 향후 총 면적 71만7000㎡ 규모로 125대의 항공기를 건조·주차할 예정이다. . 센터는 운영부터 2025년까지 점진적으로 운영을 확대해 150명의 직원을 직접 고용할 예정이다. Airbus 항공기 전체 수명주기 서비스

6월 28일 이 사이트의 소식에 따르면, "선전 지하철" 뉴스에 따르면, 오늘 아침 선전철도그룹과 동부일반항공이 공동으로 건설한 중국 최초의 '저고도+궤도' 항공철도 복합운송 프로젝트가 심천에서 공식적으로 개통됐다. 심천 북역 허브의 동쪽 광장 시민들에게 심천 항공철도 운송을 위한 원스톱 연결 서비스를 제공합니다. 보도에 따르면 선전 북역 허브 항공-철도 복합 운송 프로젝트는 East Plaza의 C1 유닛에 위치하며 현장에는 314평방미터 규모의 첨단 헬기 착륙장이 있어 시민들에게 높은 수준의 항공 택시 전세 운송을 제공할 수 있습니다. 업계의 서비스. 현재 시민들은 'i Shenzhen Railway Property' WeChat 공개 계정을 팔로우하고 'Property Line - Air Taxi Travel'을 클릭하여 경로를 구매하고 예약 시간을 선택하고 티켓 구매, 체크인 및 기타 절차를 완료한 후 이동할 수 있습니다. 선전 북역까지 허브 동쪽 광장에 있는 앞치마에서 체크인하세요. 페니의 복합운송 서비스

C++를 사용하여 간단한 비행기 예약 시스템을 구현하는 방법은 무엇입니까? 항공 교통이 발전하고 편안한 여행에 대한 사람들의 요구가 증가함에 따라 항공기 예약 시스템이 점점 더 중요해지고 있습니다. 이 기사에서는 C++ 프로그래밍 언어를 사용하여 간단한 비행기 예약 시스템을 구현하는 방법을 알아봅니다. 이 시스템을 통해 사용자는 항공편 정보 확인, 좌석 선택, 항공권 예약 및 취소 및 기타 기능을 사용할 수 있습니다. 먼저 항공편을 나타내는 Flight 클래스를 만들어야 합니다. 이 클래스에는 항공편 번호, 출발 장소, 목적지, 출발 시간 등의 속성이 포함되어야 합니다.
