quick-cocos2d-x想制作一个退出游戏的按钮,怎么android实现按钮退出

Cocos2D-X弹出对话框的实现与封装
&&& 在用Cocos2DX引擎开发游戏的过程中,我们经常需要弹出一个对话框或者提示框,通知玩家一些必要的信息。这时候我们就需要考虑怎样设计和封装一个这样的弹出对话框。首先,这样的弹出框一般都是“模态窗口”,即在没有对当前弹出的对话框进行确认的时候,不能继续往下操作。
一个对话框一般包含几个部分:背景图、两个按钮(个数可定制)、标题、文字内容。我们需要使对话框为模态窗口,并设置弹出效果。下面来说说创建弹出对话框的要点:
<font STYLE="FonT-siZe: 18px" COLOR="#、弹出层的触摸优先级,操作与显示相一致
因为弹出对话框是“模态窗口”,所以我们需要设置触摸优先级来保证对话框是模态的。
&&&&&&在这里我们以CCMenu作为对话框按钮的操作实现,我们知道CCMenu
的默认触摸级别是-128,那么我们的【弹出层】触摸级别该设置为多少?
在我们设定触摸级别时,请记住一句话,操作与显示相一致。此话何意?现在设想这样一种情况,我们为了屏蔽弹出层以外所有的层的操作,而将弹出层级别置为
-129 ,这样便保证了它是模态的了(一般而言,除了 CCMenu
的级别,用户自定义也无需这么大),但是如果当前弹出层上方还有其它的层(也可以是弹出层的父节点上方有其它层,如多层的 UI
设计),并且其上也有 CCMenu 按钮,那么就出现了显示在 弹出层上放层中的 CCMenu 按钮不能点击,这不科学!实际,在弹出层的
CCMenu 也不能点击,只是我们可以通过将弹出层的触摸消息传递给层中的 CCMenu
解决。所以设置为一味的追求最大的触摸优先级,并不可取,它不能很好的做到 操作与显示相一致,而优先级小于 CCMenu
并不能屏蔽下方的其它 CCMenu 操作,所以对于弹出层本身,它设置为 -128
是合理的,对于同样级别的这些元素来说(弹出层和CCMenu),能够做到,显示在最上方的优先处理。如果在弹出层上方还有层,是可以点击的,为什么不呢!而我们要做的是,通过逻辑控制,让弹出层节点,最后添加到场景的最上方。
所以,在这里层本身的触摸优先级别设置为 -128 ,而弹出层中的按钮是
CCMenu,都是同级,操作与显示相一致,唯一要注意的是逻辑的控制,什么时候弹出层,由哪个节点弹出层(一般由场景基层来负责),以保证它显示在最上方。
2、定制按钮个数
&我们可以定制按钮的个数。在封装的时候添加addButton方法,用来在当前对话框中动态地添加一个或几个按钮,而添加几个?当然由你来决定。但确定的是,它们的位置会随着按钮个数的不同而不同,如果一个按钮,将居中显示(一分为二),如果两个(三等份距离),如果三个(四等份距离),以此类推。这里addButton()的主要作用是创建一个menuItem添加到Menu中。然后在onEnter中(此时按钮个数已经确定)计算并设置各按钮的位置,并添加至界面之中。
3、窗口的大小可变
&弹出对话框的窗口大小要是可变的,通过 getContentSize 来获取。
如果没有设置
ContentSize ,那么采取的方案是,窗口大小与传入图片一样大。
如果设置了ContentSize,则将窗口设定为指定大小。这时候需要将背景图片进行缩放,如何缩放?
【答案】是利用9宫格图CCScale9Sprite缩放图片,缩放带圆角的图片。原理如下:&
& 九宫格图是通过1个CCSpriteBatchNode和9个CCSprite来实现的,原理很简单,通过将原纹理资源切割成9部分(PS:
这也是叫9宫格的原因),保持4个角不变形,根据想要的尺寸来进行拉伸或压缩。
& & &使用方法:CCScale9Sprite* background
=&CCScale9Sprite::create("back.png");
&background-&setContentSize(CCSizeMake(400,200));
//400x200是要生成的尺寸
&background-&setPosition(Center);
&this-&addChild(background);
4、回调函数的实现方案
&对于回调一般有两种方式,一种是 delegate
回调,这需要定义接口,由上层,继承实现接口,并把自己当作参数,传入弹出层,由弹出层调用 delegate 的接口方法实现,在
Cocos2d-x 里面很多地方用到此方式。另一种则是函数绑定,就像 CCMenu 那样的绑定函数。
在这里设计的是按钮个数可变,功能也不尽相同,所以我们选择绑定函数!进一步封装,将弹出层的按钮回调函数设置为内部实现,然后在
回调给它的上层,之后关闭对话框(关闭的操作由对话框层来完成)。回调给它的上层的时候传递CCNode参数,以其 tag 标示,点击的是哪个按钮。【用void
setCallbackFunc(CCObject* target, SEL_CallFuncN callfun);
作为外部接口,设置上层对象和上层的回调函数。】
5、onEnter动态创建弹出层
&根据设置的属性去创建层
有两种方式:
其一,实时设置,实时刷新。比如在 static
PopupLayer* create(const char* gackgroundImage)
的实现里面,创建一个精灵,并设置好图片,添加到当前层,如果调用了 setContentSize
我们再在此方法获取精灵后去修改这个精灵的大小
其二,保留属性,动态组建。也就是说前面一些封装的函数比如setTitle()、setContentText(),addButton()、setCallbackFunc()只用于设置属性参数(即给变量赋值)。参数设置好以后,在一个适当的执行时期,根据以上参数,动态创建符合需求的精灵/层,而这个操作在
onEnter 里尤为合适。
在这里我们使用动态组建的方式,即在前面用一些变量来保存对话框所需的信息,然后在 onEnter 中,读取这些信息,以实时添加至界面之中。
//PopupLayer.h
#include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
PopupLayer : public CCLayer{
PopupLayer();
~PopupLayer();
bool init();
//需要重写触摸注册函数,重新给定触摸级别
void registerWithTouchDispatcher();
//重写触摸函数,返回true,屏蔽其它层,达到“模态”效果
ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
//静态创建函数,创建一个弹出层,设置背景图片
PopupLayer* create(const char* backgroundImage);
//设置标题
setTitle(const char* title, int fontsize = 20);
& & //设置文本内容,padding
为文字到对话框两边预留的距离,这是可控的,距上方的距离亦是如此
setContentText(const char* text, int fontsize=20, int padding=50,
int paddingTop=100);
//设置上层对象和上层回调函数,用于回调时传递CCNode参数
setCallBackFunc(CCObject* target, SEL_CallFuncN
//添加menuItem按钮,封装了一个函数,传入些必要的参数
addButton(const char* normalImage, const char* selectedImage, const
char* title, int tag=0);
//为了在显示层时的属性生效,选择在onEnter里动态生成
void onEnter();
void onExit();
CREATE_FUNC(PopupLayer);
buttonCallBack(CCObject* pSender);
//文字内容两边的空白区域
m_contentP
m_contentPaddingT
CCObject* m_callbackL
SEL_CallFuncN m_
//定义了CCMenu*类型变量m_pMenu, 并且直接定义默认的set/get方法
CC_SYNTHESIZE_RETAIN(CCMenu*, m_pMenu,
MenuButton);
CC_SYNTHESIZE_RETAIN(CCSprite*, m_sfBackGround,
SpriteBackGround);
CC_SYNTHESIZE_RETAIN(CCScale9Sprite*, m_s9BackGround,
Sprite9BackGround);
CC_SYNTHESIZE_RETAIN(CCLabelTTF*, m_ltTitle,
LabelTitle);
CC_SYNTHESIZE_RETAIN(CCLabelTTF*, m_ltContentText,
LabelContentText);
//PopupLayer.cpp
"PopupLayer.h"
USING_NS_CC;
构造函数中变量设初值
PopupLayer::PopupLayer()
m_contentPadding =
m_contentPaddingTop =
m_callbackListener =
m_callback =
m_sfBackGround =
m_s9BackGround =
m_ltContentText =
m_ltTitle =
PopupLayer::~PopupLayer()
CC_SAFE_RELEASE(m_pMenu);
CC_SAFE_RELEASE(m_sfBackGround);
CC_SAFE_RELEASE(m_s9BackGround);
CC_SAFE_RELEASE(m_ltContentText);
CC_SAFE_RELEASE(m_ltTitle);
PopupLayer::init()
if ( !CCLayer::init()
this-&setContentSize(CCSizeZero);
//初始化需要的Menu
CCMenu* menu =
CCMenu::create();
menu-&setPosition(CCPointZero);
setMenuButton(menu);
&//set()方法
setTouchEnabled(true);
&//开启触摸响应
//重写触摸注册函数,重新给定触摸级别
PopupLayer::registerWithTouchDispatcher(){
这里的触摸优先级设置为-128,与CCMenu同级,保证了屏蔽下方的触摸
CCDirector::sharedDirector()-&getTouchDispatcher()-&addTargetedDelegate(this,
-128, true);
//触摸函数ccTouchBegan,返回true
PopupLayer::ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent
//创建一个弹出层,给背景精灵变量赋值
PopupLayer*
PopupLayer::create( const char* backgroundImage
PopupLayer* popup =
PopupLayer::create();
popup-&setSpriteBackGround(CCSprite::create(backgroundImage));
popup-&setSprite9BackGround(CCScale9Sprite::create(backgroundImage));
//给标题变量赋值
void PopupLayer::setTitle(
const char* title, int fontsize ){
CCLabelTTF* ltfTitle =
CCLabelTTF::create(title, "Arial", fontsize);
ltfTitle-&setColor(ccc3(0,
setLabelTitle(ltfTitle);
//给文本变量赋值
PopupLayer::setContentText( const char* text, int fontsize, int
padding, int paddingTop ){
CCLabelTTF* content =
CCLabelTTF::create(text, "Arial", fontsize);
content-&setColor(ccc3(0,
setLabelContentText(content);
m_contentPadding =
m_contentPaddingTop =
//给下层层变量和回调函数变量赋值
PopupLayer::setCallBackFunc( CCObject* target, SEL_CallFuncN
callfun ){
m_callbackListener =
m_callback =
//给menu菜单变量添加Item
bool PopupLayer::addButton(
const char* normalImage, const char* selectedImage, const char*
title, int tag ){
CCSize winSize =
CCDirector::sharedDirector()-&getWinSize();
CCPoint center =
ccp(winSize.width/2, winSize.height/2);
// 创建图片菜单按钮
CCMenuItemImage* menuImage =
CCMenuItemImage::create(
normalImage, selectedImage,
this, menu_selector(PopupLayer::buttonCallBack));
menuImage-&setTag(tag);
menuImage-&setPosition(center);
添加文字说明并设置位置
CCSize menuSize =
menuImage-&getContentSize();
CCLabelTTF* ttf =
CCLabelTTF::create(title, "Arial", 15);
ttf-&setColor(ccc3(0, 0,
ttf-&setPosition(ccp(menuSize.width/2,
menuSize.height/2));
menuImage-&addChild(ttf);
getMenuButton()-&addChild(menuImage);
//销毁弹出框,传递参数node给下层
PopupLayer::buttonCallBack( CCObject* pSender ){
CCNode* node =
dynamic_cast(pSender);
CCLog("touch tag: %d",
node-&getTag());
if (m_callback &&
m_callbackListener)
//执行HelloWorld层的回调函数,传递node参数
(m_callbackListener-&*m_callback)(node);
this-&removeFromParentAndCleanup(true);
//全部参数都设定好后,在运行时动态加载
PopupLayer::onEnter(){
CCLayer::onEnter();
CCSize winSize =
CCDirector::sharedDirector()-&getWinSize();
CCPoint center =
ccp(winSize.width/2, winSize.height/2);
设定好参数,在运行时加载
(getContentSize().equals(CCSizeZero)){
getSpriteBackGround()-&setPosition(center);
this-&addChild(getSpriteBackGround(),0,0);
contentSize =
getSpriteBackGround()-&getTexture()-&getContentSize();
CCScale9Sprite* background =
getSprite9BackGround();
background-&setContentSize(getContentSize());
background-&setPosition(center);
this-&addChild(background,
contentSize =
getContentSize();
//添加按钮,并根据Item的个数设置其位置
this-&addChild(getMenuButton());
float btnWidth =
contentSize.width /
(getMenuButton()-&getChildrenCount()+1);
CCArray* array =
getMenuButton()-&getChildren();
CCObject* pObj =
int i = 0;
CCARRAY_FOREACH(array,
CCNode* node =
dynamic_cast(pObj);
node-&setPosition(ccp(winSize.width/2
- contentSize.width/2 +
btnWidth*(i+1),&
&winSize.height/2 -
contentSize.height/3));
// 显示对话框标题
(getLabelTitle()){
getLabelTitle()-&setPosition(ccpAdd(center,
ccp(0, contentSize.height/2 - 25.0f)));
this-&addChild(getLabelTitle());
//显示文本内容
(getLabelContentText()){
CCLabelTTF* ltf =
getLabelContentText();
ltf-&setPosition(center);
ltf-&setDimensions(CCSizeMake(contentSize.width
- m_contentPadding*2, contentSize.height -
m_contentPaddingTop));
ltf-&setHorizontalAlignment(kCCTextAlignmentLeft);
this-&addChild(ltf);
//弹出效果
CCSequence *popupActions =
CCSequence::create(
CCScaleTo::create(0.0,
CCScaleTo::create(0.06,
CCScaleTo::create(0.08,
CCScaleTo::create(0.08, 1.0),
this-&runAction(popupActions);
PopupLayer::onExit(){
CCLayer::onExit();
弹出层调用:
定义一个弹出层,传入一张背景图片
PopupLayer* popup =
PopupLayer::create("popupBackGround.png");
ContentSize是可选的设置,可以不设置,如果设置则把它当做9图缩放
//popup-&setContentSize(CCSizeMake(400,
popup-&setTitle("Message");
popup-&setContentText("Most
people... blunder round this city.", 20, 50,
设置回调函数,回调传回一个CCNode以获取tag判断点击的按钮
这只是作为一种封装实现,如果使用delegate那就能够更灵活的控制参数了
popup-&setCallBackFunc(this,
callfuncN_selector(HelloWorld::buttonCallBack));
//添加按钮,设置图片、文字,tag信息
popup-&addButton("button.png",
"button.png", "Ok", 0);
popup-&addButton("button.png",
"button.png", "Cancel", 1);
this-&addChild(popup);
测试截图:
这样,对话框的基本模型就完成了,它实现了以下功能:
一个可以弹出的对话框实现
模态窗口的实现(需要逻辑的控制)
多按钮的支持,位置自适应,提供回调函数
提供标题和内容设置
支持 九图,控制适应弹出框大小
参考文:http://blog.csdn.net/u/article/details/
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。今天看啥 热点:
quick-cocos2d-x游戏开发【9】——单点触摸,quickcocos2d
quick的触摸机制,我想廖大已经在这篇文章里说的很清楚了,我们这些小辈们就是在他的基础上完备一下,说说用法就可以了,嘿嘿。
在2.2.3之前的版本(不包括2.2.3),触摸机制和廖大在那篇文章里面的说的一样,添加触摸响应采用addTouchEventListener来完成,不过在此之后,对触摸机制就进行了完全的改写,和cocos2dx 3.0的版本一样,采用更加灵活的CCNode事件分发机制。
如果你对cocos 3.0中触摸机制很了解,那么quick的触摸使用起来也很方便。直接来看怎么用。
在前面已经说了,我们添加的节点元素都是在scene中的,但是触摸响应不能直接给scene添加事件监听,所以我们可以用一个层来完成。并且,如果能够接受触摸响应,还需要开启触摸功能。
local layer = display.newLayer()
self:addChild(layer)
layer:setTouchEnabled(true)
layer:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE)
layer:addNodeEventListener(cc.NODE_TOUCH_EVENT, function (event)
local x, y, prevX, prevY = event.x, event.y, event.prevX, event.prevY
if event.name == &began& then
print(&layer began&)
elseif event.name == &moved& then
print(&layer moved&)
elseif event.name == &ended& then
print(&layer ended&)
return true
从上面的代码可以看到,可以设置触摸的模式,
cc.TOUCH_MODE_ONE_BY_ONE 是单点触摸
cc.TOUCH_MODE_ALL_AT_ONCE 是多点触摸
在添加节点事件监听addNodeEventListener中,我们设置监听事件的类型是cc.NODE_TOUCH_EVENT
这个监听事件类型,其定义了几个引擎级事件,分别是,
-- cocos2dx 引擎级事件
c.NODE_EVENT & & & & & & & & & & & & & & & & & & & & & = 0
c.NODE_ENTER_FRAME_EVENT & & & & & = 1
c.NODE_TOUCH_EVENT & & & & & & & & & & & & &= 2
c.NODE_TOUCH_CAPTURE_EVENT & & = 3
c.MENU_ITEM_CLICKED_EVENT & & & & & &= 4
c.ACCELERATE_EVENT & & & & & & & & & & & & & &= 5
c.KEYPAD_EVENT & & & & & & & & & & & & & & & & & & & = 6
其次是event参数,在event参数里,里面有name,x,y,prevX,prevY 这五个变量,分别代表着
-- event.name 是触摸事件的状态:began, moved, ended, cancelled, added(仅限多点触摸), removed(仅限多点触摸)
-- event.x, event.y 是触摸点当前位置
-- event.prevX, event.prevY 是触摸点之前的位置
所以添加上面的代码,简单触摸屏幕,就可以看到log中的print的结果。
在触摸的回调函数function(event)中,记得考虑是否需要添加返回&#20540;,返回&#20540;的作用不用多说,true则后面的moved,ended等状态会接收到,否则接收不到,默认如果不添加则代表false。
在新版触摸机制中,还需要主要的一个就是触摸吞噬,
setTouchSwallowEnabled(true)
它的作用就是是否继续传递触摸消息,在绘制节点的时候,越是在屏幕上方,就是zOrder越大,越优先接收到触摸事件,如果设置吞噬,那么在它下方的节点都不会接收到触摸消息了。默认如果不设置则quick自动设置为true。
当然,不仅仅可以给layer添加触摸事件,你也可以给精灵添加,这就看你游戏的需要了。
推荐你看看牟东海老师的《Cocos2d-x跨平台手机游戏开发配4个项目(引擎应用,单点和多点触摸、瓦片地图、骨骼动画)》这套视频教程不错,教程通过4个种类各不相同的实战项目,展示了cocos2d-x的卓越性能。并且将CocoStudio工具的使用、单点和多点触摸、瓦片地图、骨骼动画、数据库、json字符串等当下游戏开发中常见的开发手段巧妙的融入到项目之中。课程中不仅对cocos2d-x引擎的功能做了系统的系统的讲解,还将单例、监听者等常用设计模式贯穿始终。 课程大纲: 一、飞机大战项目:
1. cocos2d-x原理及环境配置 2. cocostudio使用方法及UI控制(上) 3. cocostudio使用方法及UI控制(下) 4. XML文件读取与骨骼动画 5.游戏框架 6.游戏战场(上) 7.游戏战场(中) 8.游戏战场(下)
二、超级玛丽项目:
1.瓦片地图(上) 2.瓦片地图(中) 3.瓦片地图(下) 4.模板编程与单例模式 5.游戏摇杆与多点触摸(上) 6.游戏摇杆与多点触摸(中) 7.游戏摇杆与多点触摸(下) 8.游戏世界之静态物体(上) 9.游戏世界之静态物体(中) 10.游戏世界之静态物体(下) 11.游戏世界之动态物体(上) 12.游戏世界之动态物体(中) 13.游戏世界之动态物体(下) 14.游戏世界之玛丽(上) 15.游戏世界之玛丽(下) 16.玛丽顶撞物体(上) 17.玛丽顶撞物体(下) 18.阶段调试 19.游戏世界之敌人(上) 20.游戏世界之敌人(中) 21.游戏世界之敌人(下) 22.游戏世界之静态敌人 23.游戏世界之火球(上) 24.游戏世界之火球(下) 25.功能扩展
三、打地鼠项目:
1.登陆界面UI 2.关于界面和选关界面UI 3.商店UI和战场UI 4.剪切节点 5.地鼠打击控制(上) 6.地鼠打击控制(中) 7.地鼠打击控制(下) 8.sqlite数据库使用方法(上) 9.sqlite数据库使用方法(下) 10.静态数据之锤子(上) 11.静态数据之锤子(下) 12.静态数据之关卡与地鼠 13.静态数据只布局与关卡地鼠信息(上) 14.静态数据只布局与关卡地鼠信息(下) 15.游戏道具(上) 16.游戏道具(下) 17.数据与游戏流程 18.数据存档于json格式(上) 19.数据存档于json格式(中) 20.数据存档于json格式(下)
四、天天爱消除项目:
1.再谈观察者模式(上) 2.再谈观察者模式(下) 3.宝石的映射关系 4.宝石的触摸控制(上) 5.宝石的触摸控制(下) 6.消除算法实现求采纳
这个问题很普遍,就是你点击一次,让它跳一下。等落下来了,再点一次,再跳一次。动画过程中点击不会跳跃。一般在游戏开发中,我们都习惯用一个bool en变量来控制,你先点击事件中,也就是这个精灵runAction();的时候en设为false,并且跳跃动画推荐有jumpBy,在其中添加一个回调,专门用来当动画结束是将en设为true。建议多看看damo。谢谢~祝你成长。
相关搜索:
相关阅读:
相关频道:
Android教程最近更新Pages: 1/26
主题 : 手把手教你学会使用Quick-Cocos2d-x制作横版过关游戏【上课中!!~】
UID: 98590
发帖: 2593
可可豆: 14444 CB
威望: 7582 点
在线时间: 8181(时)
发自: Web Page
来源于&&分类
手把手教你学会使用Quick-Cocos2d-x制作横版过关游戏【上课中!!~】&&&
本帖被 阿花君霸占路人 执行取消置顶操作()
学习Cocos引擎最快的方法就是跟着教程一步步学习实践,最终完成教程演示的demo,你在学习过程中是否遇到过问题和障碍呢?为了让你的学习之路更加顺畅,我们社区特别组织了系列教程在线学习活动:第一期就由Cocos引擎教程组的王帅(社区id :)给大家带来系列教程,并提供相应教学指导。本教程共六讲,每讲1-2个小时,每周二发一讲教程,每周四下午2点-4点本教程撰写者会进行教程专项答疑,大家有问题可以直接在本帖中以回帖形式发布~到时候英俊神勇的王老师会一一回答哦~~~希望学习本教程的同学,在学习之后把完成的游戏源码和截图发布到本帖中,王帅老师会对所有的作品进行点评,有创新的、优秀的作品发布者将可获得Cocos2d-x纪念T恤一件! 引用 教程名称:使用Quick-Cocos2d-x制作横版过关游戏教程目标:从零开始讲解使用Quick-Cocos2d-x制作游戏的步骤。基本上覆盖了所有的基本知识点,在跟随教程的学习完成后,能够使用Quick-Cocos2d-x制作自己的游戏,能够掌握Quick-Cocos2d-x的基本上所有的常用方法和类。对于从未制作过游戏的开发人员,能够熟悉游戏开发中的常用技能和基本概念。学习要求:有一定编程基础,懂Lua语言,懂基本的2dx运用资源包地址:进度安排:课程内容学习时间建议第一讲:1-2小时第二讲:1-2小时第三讲:2小时第四讲:2小时第五讲:2小时第六讲:2小时本期奖品:
点击上面列表中已发布的教程,马上开始愉快的学习之旅吧!!!
如果大家对于CocoaChina有任何意见或者建议可以发邮件到:
UID: 98590
发帖: 2593
可可豆: 14444 CB
威望: 7582 点
在线时间: 8181(时)
发自: Web Page
7月31日下午2--4点答疑笔记!!!!!!!!引用 引用第19楼wei_bj于 14:17发表的&#160;&#160;:function MainScene:addTouchLayer()&#160;&#160;&#160;&#160;local function onTouch(eventName, x, y)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if eventName == &began& then&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;self.player:walkTo({x=x,y=y})&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;end&#160;&#160;&#160;&#160;endeventname什么情况下会是 began ?代码中没有交代 这个是触摸的事件,比如你手指按下,手指滑动或者抬起,都会有事件下发 引用 引用第20楼wei_bj于 14:19发表的&#160;&#160;:此外,能否对“CCNode的对象都能够接收触摸事件”做举例说明,或是提供文档或是相关学习的源代码?这个的意思就是只要你的类是从CCNode继承下来的,那么就可以通过addNodeEventListener(cc.NODE_TOUCH_EVENT的方式来注册触摸事件 引用 引用第37楼pk14-07-29 21:29发表的&#160;&#160;:加入素材了,但是还是显示这个...用Sprite#没有问题.这个是因为动画没找到图片,生成不了,Quick里面加#的话表示从Cache里面读图片,没有#的话表示从文件读 引用 引用第44楼qq于 18:00发表的&#160;&#160;:求cc命名空间下的api文档api文档找廖大要,其实在Quick引擎的docs目录下面是有api文档的引用 引用第54楼pk14-07-31 11:20发表的&&:老师,我有一个问题,代码中self.sprite和local sprite这两者有什么区别吗??我看你的代码中有类似的代码,看的稀里糊涂,不是很明白self.xxx类似与c++中类的成员变量,local 表示局部变量,可以看下lua的书 引用 引用第53楼pk14-07-31 09:00发表的&&:我有很多个文件上下左右不同的文件,这样全塞进一个Frames里面还是左右分开来放? 这个可以看你具体的需要 引用 引用第63楼pk14-07-31 14:24发表的&#160;&#160;:newSprite一个image之后,我想要在之后比如玩家进入一个场景回来之后,把这个新的图片更改成另外一张图片,不同函数块要怎么修改.,&#160;local frame = CCSpriteFrameCache:sharedSpriteFrameCache():spriteFrameByName(&player1-2-4.png&);&#160;&#160;&#160;&#160;self:setDisplayFrame(frame);引用 引用第73楼爱吃鱼的喵喵于 14:58发表的&#160;&#160;:老师,骨骼动画在quick里面是怎么用的,还有spine怎么是收费的,有没替代的工具使用呢。骨骼动画的话你可以看下Quick的samples里的dragonbones,至于骨骼动画目前cocostudio,dragonbones,spine都可以用引用 引用第76楼爱吃鱼的喵喵于 15:08发表的&#160;&#160;:老师,在横版游戏里面,很多在线玩家都在同一个场景,切换进入下一个地图的时候,使用的是另一个Scene,请问下场景里面的玩家对象是不是不用清除,切换另一个Scene的时候,自动销毁上一个Scene的显示对象的吗?这个问题涉及到两方面的问题,一个是CCDirector里的场景切换,你可以看下CCDirector.h里面有关scene的几个方法:runWithScene()、pushScene()、popScene()、replaceScene()几个方法;第二个问题是内存管理机制的问题,现在的内存管理是通过parent和child来进行,如果parent node被释放的话,child node也是会被释放的引用 引用第79楼pk14-07-31 15:26发表的&#160;&#160;:我想问一下,我这个场景中的所有图片在切换场景后会自动清除还是要手动.我看API貌似要手动,可是我场景中的图片好多,真的要一个个加入吗?我用640*1140作为分辨率建立了一张图片,放在Quick中,在低于640或高于640太多的分辨率下测试左右有黑边.可以用代码补掉么?怎么补?1.图片资源是在Cache里的,你说的是精灵那些么?那些你如果是通过addChild添加的话,replaceScene会把前一个Scene的东西释放掉2.你这个问题是分辨率适配的问题,你如果是用宽度适配的话,在低于或高于640分辨率的话是会自动适应屏幕宽度的,但是高度就会等比例的进行缩放
如果大家对于CocoaChina有任何意见或者建议可以发邮件到:
发帖: 1052
可可豆: 124042 CB
威望: 126043 点
在线时间: 2517(时)
发自: Web Page
沙发。。。。
图文唐诗三百首,图文国学合集汉语词典速查版:最新现代汉语词典 新华字典 成语词典大全-中文好助手
级别: 精灵王
UID: 113399
发帖: 3616
可可豆: 5704 CB
威望: 6223 点
在线时间: 2592(时)
发自: Web Page
前排 只能围观
级别: 风云使者
UID: 78198
发帖: 3543
可可豆: 3376 CB
威望: 13237 点
在线时间: 4900(时)
发自: Web Page
微信whglyy
级别: 新手上路
UID: 326259
可可豆: 77 CB
威望: 48 点
在线时间: 59(时)
发自: Web Page
支持,强烈支持教程
级别: 新手上路
可可豆: 90 CB
威望: 70 点
在线时间: 96(时)
发自: Web Page
前排刷存在~
级别: 精灵王
可可豆: 3285 CB
威望: 3285 点
在线时间: 1891(时)
发自: Web Page
级别: 新手上路
可可豆: 57 CB
威望: 57 点
在线时间: 145(时)
发自: Web Page
这是大量新手的福利啊
级别: 骑士
UID: 316527
可可豆: 692 CB
威望: 558 点
在线时间: 353(时)
发自: Web Page
Pages: 1/26
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版

我要回帖

更多关于 quick cocos2dx 官网 的文章

 

随机推荐