3.cocos2dx它Menu,由menu為了實現場景切換



1 頭文件

TMenu.h

#ifndef __TMENU_H__

#define __TMENU_H__

?

#include "cocos2d.h"

USING_NS_CC;

?

class TMenu :public CCLayer

{

public:

??? static CCScene * scene();

??? CREATE_FUNC(TMenu);

??? bool init();

?

??? CCMenu * menu;

?

??? void menuCallback(CCObject * sender);

??? void closeCallback(CCObject * sender);

?

??? virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

??? virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);

};

?

#endif

TMenu.cpp

#include "TMenu.h"

#include "AppMacros.h"

#include "T02LayerSprite.h"

#include "T03LayerZorder.h"

#include "T04ColorLayer.h"

#include "T05Coordinate.h"

#include "T06BatchNode.h"

#include "T07Schedule.h"

#include "T08Touch.h"

#include "T09Memory.h"

#include "T10Label.h"

?

//通過sizeof(menu_array)求出數組占用的總空間大小

//通過sizeof(*menu_array)求出數組中的每一個元素的大小

static char * menu_array[]

{

??? "T02LayerSprite.h",

??? "T03LayerZorder.h",

??? "T04ColorLayer.h",

??? "T05Coordinate.h",

??? "T06BatchNode.h",

??? "T07Schedule.h",

??? "T08Touch.h",

??? "T09Memory.h",

??? "T10Label.h"

};

?

CCScene * TMenu::scene()

{

??? CCScene * scene = CCScene::create();

??? TMenu * layer = TMenu::create();

??? scene->addChild(layer);

??? return scene;

}

?

bool TMenu::init()

{

??? CCLayer::init();

?

??? menu = CCMenu::create();

??? //通過以下的方式實現將菜單項加入到menu

??? for (int i = 0; i < sizeof(menu_array) / sizeof(*menu_array); i++)

??? {

??????? CCMenuItem * item = CCMenuItemFont::create(menu_array[i],

??????????? this,

??????????? menu_selector(TMenu::menuCallback));

??????? menu->addChild(item);

??? }

??? //設置菜單的顯示方向為垂直方向

??? menu->alignItemsVertically();

??? addChild(menu);

?

??? CCArray * array = menu->getChildren();

??? CCObject * obj;

??? int i = 0;

??? CCARRAY_FOREACH(array, obj)

??? {

??????? CCMenuItem * item = (CCMenuItem*)obj;

??????? item->setTag(i + 1 + 10000);

??????? i++;

??? }

??? CCMenuItem * closeItem = CCMenuItemImage::create("CloseNormal.png", "CloseSelected.png");

??? closeItem->setTarget(this, menu_selector(TMenu::closeCallback));

??? CCMenu * menu2 = CCMenu::create(closeItem, NULL);

??? menu2->setPosition(CCPointZero);

??? closeItem->setPosition(ccp(winSize.width - closeItem->getContentSize().width / 2,

??????? winSize.height - closeItem->getContentSize().height / 2));

??? addChild(menu2);

?

??? //設置觸摸事件,為可touch

??? setTouchEnabled(true);

??? setTouchMode(kCCTouchesOneByOne);

?

??? return true;

}

?

//當點擊到菜單之后跳轉到指定的CCScene中去

void TMenu::menuCallback(CCObject * sender)

{

??? CCMenuItem * item = (CCMenuItem *)sender;

??? CCScene * pScene = NULL;

??? switch (item->getTag() - 10000)

??? {

??? case 1:

??????? pScene = T02LayerSprite::scene();

??????? break;

??? case 2:

??????? pScene = T03LayerZorder::scene();

??????? break;

??? case 3:

??????? pScene = T04ColorLayer::scene();

??????? break;

??? case 4:

??????? pScene = T05Coordinate::scene();

??????? break;

??? case 5:

??????? pScene = T06BatchNode::scene();

??????? break;

??? case 6:

??????? pScene = T07Schedule::scene();

??????? break;

??? case 7:

??????? pScene = T08Touch::scene();

??????? break;

??? case 8:

??????? pScene = T09Memory::scene();

??????? break;

??? case 9:

??????? pScene = T10Label::scene();

??????? break;

??? }

??? if (pScene != NULL)

??? {

??????? //通過CCDirectorsharedDirector來實現場景的切換

??????? CCDirector::sharedDirector()->replaceScene(pScene);

??? }

}

?

//當點擊關閉的時候游戲退出

void TMenu::closeCallback(CCObject * sender)

{

??? exit(0);

}

?

bool TMenu::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)

{

??? return true;

}

?

void TMenu::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){

??? CCRect rcWin = CCRect(0,40,winSize.width,winSize.height - 80);

??? CCMenuItem * firstItem = (CCMenuItem *)menu->getChildren()->objectAtIndex(0);

??? CCMenuItem * lastItem = (CCMenuItem *)menu->getChildren()->lastObject();

?

??? CCPoint firstInWorld = menu->convertToWorldSpace(firstItem->getPosition());

??? CCPoint lastInWorld = menu->convertToWorldSpace(lastItem->getPosition());

?

??? //當中Delta的坐標表示的是開始坐標的減去最后坐標的差值

??? if (rcWin.containsPoint(firstInWorld) && pTouch->getDelta().y<0)

??????? return;

??? if (rcWin.containsPoint(lastInWorld) && pTouch->getDelta().y>0)

??????? return;

??? menu->setPositionY(menu->getPositionY() + pTouch->getDelta().y);

}

執行結果:

?

版權聲明:本文博客原創文章,博客,未經同意,不得轉載。

轉載于:https://www.cnblogs.com/yxwkf/p/4658589.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257012.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257012.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257012.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Difference: throw or throw ex?

Difference: throw or throw ex? 主要區別在于throw出的堆棧詳細程度。 throw ex只是拋出在當前代碼處的錯誤。 throw 能夠更進一步&#xff0c;拋出內部調用的具體錯誤。 Just for demonstrating, if you have classes in C# as follows: using System;namespace WindowsAppl…

學習筆記01:1.1 基于概率的信任

基于概率的信任 大數定律&#xff1a;當樣本數量越來越多時&#xff0c;預測事件也就越來越接近于真實的事件&#xff0c;事件出現的頻率無窮地接近事件發生的概率建模檢驗&#xff1a;人工規則->學習模型&#xff0c;數據少則重視先驗&#xff0c;數據多則重視后驗給予概率…

人工智能數學基礎知識

方差的概念與計算公式&#xff0c;例1 兩人的5次測驗成績如下&#xff1a;X&#xff1a; 50&#xff0c;100&#xff0c;100&#xff0c;60&#xff0c;50 E(X)72&#xff1b;Y&#xff1a; 73&#xff0c; 70&#xff0c; 75&#xff0c;72&#xff0c;70 E(Y)72。平均成績相同…

學習筆記02:直播串講——3/22

去 就 就 就 接近 就 就 接近

認真分析mmap:是什么 為什么 怎么用

mmap基礎概念 mmap是一種內存映射文件的方法&#xff0c;即將一個文件或者其它對象映射到進程的地址空間&#xff0c;實現文件磁盤地址和進程虛擬地址空間中一段虛擬地址的一一對映關系。實現這樣的映射關系后&#xff0c;進程就可以采用指針的方式讀寫操作這一段內存&#xff…

數據庫子查詢

子查詢&#xff0c;又叫做嵌套查詢。 將一個查詢語句做為一個結果集供其他SQL語句使用&#xff0c;就像使用普通的表一樣&#xff0c;被當作結果集的查詢語句被稱為子查詢。 子查詢有兩種類型&#xff1a; 一種是只返回一個單值的子查詢&#xff0c;這時它可以用在一個單值可以…

攝像頭資料

https://blog.csdn.net/u013749068/article/details/79463736

配置vim在源代碼中自動添加作者信息

每個程序員都有自己心愛的代碼編輯和查看工具&#xff0c;相信不少Linux下的程序員都喜歡用Vim&#xff0c;盡管Vim沒有SourceInsight這種依托于桌面環境的編輯器看起來那樣強大&#xff0c;但是Vim的高效、簡潔以及強大的可配置性都讓它吸引了無數忠實的fans。 很多編輯器都支…

paddle模塊的詳細介紹

https://blog.csdn.net/hua111hua/article/details/89415396

[CareerCup] 2.4 Partition List 劃分鏈表

2.4 Write code to partition a linked list around a value x, such that all nodes less than x come before all nodes greater than or equal to x. LeetCode上的原題&#xff0c;請參見我之前的博客Partition List 劃分鏈表。轉載于:https://www.cnblogs.com/grandyang/p/…

sdl的縮放問題

SDL是一種既是開源的&#xff0c;也是跨平臺的多媒體開發包&#xff0c;在各種平臺上應用很廣&#xff0c;經常和FFMPEG等解碼器同時使用。對于在windows mobile等缺乏通用播放器的平臺來說&#xff0c;是一種很好的選擇。網上很多代碼&#xff0c;介紹SDL的用法&#xff0c;主…

Ubuntu系統盤制作

1、首先打開UltraISO軟件&#xff0c;盡量下載最新版的&#xff0c;小編曾用某個舊版的UltraISO&#xff0c;制作的安裝盤&#xff0c;不能不能識別磁盤&#xff0c;安裝失敗! 2、點擊工具欄中的第二個打開鏡像文件工具&#xff0c;如圖紅色方框標志按鈕&#xff0c;然后在打開…

RH131 網絡配置

ip addr show 查看當前網絡地址 ip link show 查看網絡鏈接狀態 ip -s link show 查看網卡統計信息 ip addr add 192.168.0.154 添加ip地址 ip link dev eth0 down 禁用ip地址 網卡的配置文件/etc/sysconfig/network-scripts/ifcfg-ethx 自動專用地址&#xff1a;169.254.*.* …

學習筆記02:直播串講02

1.基于模型的學習 根據以往的學習經驗&#xff0c;建立起輸入輸出的模型&#xff0c;然后預測輸入&#xff0c;并且將輸入帶入到模型中&#xff0c;進而預測出輸出的結果&#xff0c;這種學習稱為基于模型的學習 2.機器學習的過程 1&#xff09;數據收集&#xff1a;通過爬蟲、…

如何將Pcm格式的音頻文件轉換成Wave格式的文件

最近在做一款變聲App&#xff0c;其中就用到了將pcm格式轉wave格式&#xff0c;下面貼出源代碼&#xff0c;希望帶有需求的童鞋有幫助&#xff01;&#xff01;&#xff01;這里是c語言寫的&#xff0c;也可以用java實現。當然java調用native函數要用到jni技術。具體jni技術自己…

Dojo儀表板

Dojo它提供了一個良好的儀表板顯示器&#xff0c;的影響&#xff0c;如以下&#xff1a; <!DOCTYPE html> <html> <head><title>Dojo儀表盤</title><meta charset"utf-8"><script src"http://192.168.240.186/arcgis_js…

在新的固態硬盤只裝ubuntu16.04系統,重啟后無啟動項解決方案

方法一&#xff1a;不要使用UltraISO制作ubutnu系統啟動盤&#xff0c;需要用UniversalUSBInstaller &#xff08;這個是Ubuntu官方推薦的制作u盤的軟件&#xff09; 不用UltraISO這個是因為&#xff0c;裝完ubuntu系統后&#xff0c;啟動的時候只有黑屏幕的光標&#xff0c;是…

學習筆記(22):Python網絡編程并發編程-什么是線程

立即學習:https://edu.csdn.net/course/play/24458/296436?utm_sourceblogtoedu 什么是線程&#xff1f;&#xff08;以地鐵為例&#xff09; 1.北京地鐵、上海地鐵、廣州地鐵稱之為三個不同的進程&#xff1b;而上海1號線上海3號線稱之為線程&#xff1b; 2.進程是資源單位&a…

流程圖制作在云上 https://www.processon.com/

流程圖制作在云上 &#xff1a; https://www.processon.com/ 轉載于:https://www.cnblogs.com/hopesun/p/4661429.html

機械硬盤變成了動態磁盤怎么壓縮不了該磁盤

由于我的電腦原裝是win8系統&#xff0c;自從win8系統以及以后的win10系統&#xff0c;磁盤管理方式變成了兩種&#xff0c;1是基本磁盤管理&#xff1b;2是動態磁盤管理 由于本人想要在機械硬盤上壓縮一個可用的綠色空間出來安裝ubuntu系統&#xff1b;由于本人的三星機械100…