zoukankan      html  css  js  c++  java
  • Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能

    好久没写博客了

    这几天在学习cocos studio,这个软件可以很方便的设计游戏的一些界面,并导入到cocos2dx中,今天就用button来做个样例

    首先我们打开Cocos Studio1.6,选择UIEditor,进去后我们发现有非常多的演示样例,我们就悬着一个叫demologin的演示样例


    选择好后我们发现例如以下图,简介了下功能


    这里我们选中那个loginbutton,发现这个button的实例名叫login_Button,这个名字我们等会代码里要用,然后我们保存一下

    在保存路径下找到这个project目录,打开


    有这些文件,我们把Json和Resources目录下的资源拷贝到cocos2dx中的资源目录中

    这个json文件就是记录了这个widget的各种数据,cocos2dx会解析这些数据然后还原这个界面,感兴趣的能够打开研究下

    好了到了代码阶段,我就简单的创建了个helloworld,可是我们要把三个外部的project库导入这个解决方式并引用并在头文件里包括

    好了,以下就是代码了

    //HelloWorldScene.h
    #ifndef __HELLOWORLD_SCENE_H__
    #define __HELLOWORLD_SCENE_H__
    
    #include "cocos2d.h"
    //导入这三个头文件
    //注意在这个project的属性->CC++ ->常规->附加包括文件夹 中加入这三个文件的路径
    #include "cocostudio/CocoStudio.h"
    #include "extensions/cocos-ext.h"
    #include "ui/CocosGUI.h"
    
    class HelloWorld : public cocos2d::Layer
    {
    public:
        // there's no 'id' in cpp, so we recommend returning the class instance pointer
        static cocos2d::Scene* createScene();
    
        // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
        virtual bool init();  
        
        // a selector callback
        void menuCloseCallback(cocos2d::Ref* pSender,cocos2d::ui::TouchEventType type);
        
        // implement the "static create()" method manually
        CREATE_FUNC(HelloWorld);
    };
    
    #endif // __HELLOWORLD_SCENE_H__
    

    //HelloWorldScene.cpp
    #include "HelloWorldScene.h"
    
    USING_NS_CC;
    //这个是命名空间
    using namespace cocostudio;
    using namespace ui;
    
    Scene* HelloWorld::createScene()
    {
        // 'scene' is an autorelease object
        auto scene = Scene::create();
        
        // 'layer' is an autorelease object
        auto layer = HelloWorld::create();
    
        // add layer as a child to scene
        scene->addChild(layer);
    
        // return the scene
        return scene;
    }
    
    // on "init" you need to initialize your instance
    bool HelloWorld::init()
    {
        //////////////////////////////
        // 1. super init first
        if ( !Layer::init() )
        {
            return false;
        }
        
        Size visibleSize = Director::getInstance()->getVisibleSize();
        Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
    	//获取我们的Cocos Studio   UIdemo
    	//这里我们创建了一个widget,这里说明下貌似cocostudio有自己的一套代码风格和api
    	//有些功能能和cocos2dx混合着用
    	//这里的widget有点相似一个layer,反正我是这样理解的
    	ui::Widget * pNode=cocostudio::GUIReader::getInstance()->widgetFromJsonFile("DemoLogin.json");
    	this->addChild(pNode);
    
    	//我们从widget中找到那个button的名字然后实例出来(跟android有点像)
    	ui::Button * button=(ui::Button *)ui::Helper::seekWidgetByName(pNode,"login_Button");
    	//给这个按钮添加一个touch的侦听(这边就和cocos2dx有不同了)
    	button->addTouchEventListener(this,toucheventselector(HelloWorld::menuCloseCallback));
    
        
        return true;
    }
    
    //这里是侦听回调函数
    void HelloWorld::menuCloseCallback(cocos2d::Ref* pSender,ui::TouchEventType type)
    {
    	//cocostudio的侦听,你能够依据type的类型来运行对应的代码
    	//这里用switch来推断,很的简洁明了
    	switch (type)
    	{
    	case ui::TouchEventType::TOUCH_EVENT_BEGAN:
    		{
    			log("touch began");
    			break;
    		}
    	case ui::TouchEventType::TOUCH_EVENT_MOVED:
    		{
    			log("touch moved");
    			break;
    		}
    	case ui::TouchEventType::TOUCH_EVENT_ENDED:
    		{
    			log("touch ended");
    			break;
    		}
    	case ui::TouchEventType::TOUCH_EVENT_CANCELED:
    		{
    			log("touch canceled");
    			break;
    		}
    	default:
    		break;
    	}
    }
    

    执行


    点击button測试下


    好的,完毕




  • 相关阅读:
    不准再问我:最近过的怎么样
    嫌疑人X的献身
    关于生活
    怎么可以这样
    在WPF中动态使用图片和按钮
    MFC 中获取对话框中控件焦点的方法
    MessageBox的常见用法
    拖拽(待完善版)
    Baidu Suggestion 百度搜索(仅功能实现,烂版)
    如何判断一个对象是Element?
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4281794.html
Copyright © 2011-2022 走看看