从本章开始就主要通过我制作 CrazyTetris 游戏的过程而展开。 制作伊始,我先大致地想象了一下整个游戏的流程: 因此,本章就是游戏入口以及开始菜单页面的制作。 游戏的入口主要是在 AppDelegate 中,这里主要是设置尺寸。考虑到最终是一款手机游戏,因此设
从本章开始就主要通过我制作Crazy Tetris游戏的过程而展开。
制作伊始,我先大致地想象了一下整个游戏的流程:
因此,本章就是游戏入口以及开始菜单页面的制作。
游戏的入口主要是在AppDelegate中,这里主要是设置尺寸。考虑到最终是一款手机游戏,因此设计时以手机尺寸为主。这里选用480*720。
设置窗口尺寸:
auto glview = director->getOpenGLView(); if(!glview) { glview = GLView::create("Crazy Tetris"); glview->setFrameSize(480, 720); director->setOpenGLView(glview); }
设置设计尺寸及屏幕适配策略:
glview->setDesignResolutionSize(480, 720, kResolutionExactFit );
设计尺寸之前屏幕适配有说过,设置好了后,游戏制作时的尺寸坐标就以该尺寸为基础就好了,遇到不同尺寸的设备,后根据相应屏幕适配策略进行调整。
setFrameSize是设置游戏窗口视图的大小,设置好这个后,在PC上运行时,窗口大小就是根据这个来的。
然后就是将入口场景从默认的HelloWorld改为自己的入口场景——主菜单场景:
// create a scene. it's an autorelease object auto scene = MainMenu::createScene(); // run director->runWithScene(scene);
接下来就是主菜单的制作,主菜单很简单,就一张背景,两个按钮——开始游戏和退出游戏。因此这里主要就是添加背景以及菜单及菜单按钮的制作。
主菜单是一个场景,这个场景该怎么写,我这里不多做赘述,如需要可以查看我之前的博客——cocos2dx3.2 整体概览(三)—— Scene(场景)。
必要的函数是
//创建场景 static cocos2d::Scene * createScene(); //初始化 bool init(); CREATE_FUNC(MainMenu);
而添加背景和按钮菜单在init函数中实现就好了:
首先,获取相关坐标信息:
Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin();
然后,添加背景图片:
auto background = Sprite::create("Img/background/background.png"); background->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); this->addChild(background, 0);
这里可以看出,背景也是一张图片,用Sprite将其载入,然后添加到场景中即可。设置位置时设置是设置图片中心所在位置,因此设置屏幕正中。
最后添加按钮:
auto startItem = MenuItemImage::create( "Img/button/startgame.png", "Img/button/startgame_selected.png", CC_CALLBACK_1(MainMenu::menuStartCallback, this)); startItem->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); auto exitItem = MenuItemImage::create( "Img/button/exit.png", "Img/button/exit_selected.png", CC_CALLBACK_1(MainMenu::menuExitCallback, this)); exitItem->setPosition(Vec2(origin.x + visibleSize.width - exitItem->getContentSize().width/2 - 35, origin.y + exitItem->getContentSize().height/2 + 35 )); auto menu = Menu::create(startItem, exitItem, NULL); menu->setPosition(Vec2::ZERO); this->addChild(menu, 1);
这里是添加图像按钮MenuItemImage,还可以添加纯文字的按钮或其他。
MenuItemImage的create方法,这里使用了三个参数,依此的意义是普通状态下的按钮图片,被点击状态下的按钮图片以及该按钮点击时的回调函数。
CC_CALLBACK_1是引擎中的宏定义函数,是用来为目标对象绑定回调事件的,他的参数可以有许多,但是前两个是必须的,第一个参数是selector选择器,这里就当是被绑定的回调函数,第二个参数是target,就是绑定的目标对象。
定义好两个按钮后,将这两个按钮添加到菜单Menu中,(因此这两个按钮的坐标位置是Menu中的坐标),最后将Menu添加到场景中即可。
关于设置Menu的位置,可以把Menu想象成一个直角坐标系,设置它的位置就是设置其坐标原点的位置,Menu中的Item的位置就是根据这个直角坐标系来的。
另外就是按钮绑定的回调函数就是自己定义的一个函数,这里我在头文件中声明:
void menuStartCallback(cocos2d::Ref* pSender); void menuExitCallback(cocos2d::Ref* pSender);
在源文件中定义:
void MainMenu::menuStartCallback(cocos2d::Ref* pSender) { // auto newScene = GameView::createScene(); // Director::getInstance()->replaceScene(TransitionFade::create(1.2, newScene)); } void MainMenu::menuExitCallback(cocos2d::Ref* pSender) { #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert"); return; #endif Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0); #endif }
这样,就完成了主菜单界面。运行效果如下:


在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL異步主從復制通過binlog實現數據同步,提升讀性能和高可用性。 1)主服務器記錄變更到binlog;2)從服務器通過I/O線程讀取binlog;3)從服務器的SQL線程應用binlog同步數據。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL的安裝和基本操作包括:1.下載並安裝MySQL,設置根用戶密碼;2.使用SQL命令創建數據庫和表,如CREATEDATABASE和CREATETABLE;3.執行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.創建索引和存儲過程以優化性能和實現複雜邏輯。通過這些步驟,你可以從零開始構建和管理MySQL數據庫。

InnoDBBufferPool通過將數據和索引頁加載到內存中來提升MySQL數據庫的性能。 1)數據頁加載到BufferPool中,減少磁盤I/O。 2)臟頁被標記並定期刷新到磁盤。 3)LRU算法管理數據頁淘汰。 4)預讀機制提前加載可能需要的數據頁。

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版
好用的JavaScript開發工具