Jython的安装及简单例子

这是我参照之前在iOS项目中用过的一个不规则形状按钮的第三方Button,这里用Cocos2d-x实现一个相似功能的按钮。

原文地址:http://blog.csdn.net/qqmcy/article/details/26161339

代码下载:http://download.csdn.net/detail/qqmcy/7365843

使用方法:

.h

//
//  TestScene.h
//  maptest
//
//  Created by 杜甲 on 14-5-18.
//
//

#ifndef __maptest__TestScene__
#define __maptest__TestScene__

#include "cocos2d.h"
#include "ui/CocosGUI.h"
#include "DJShapeButton.h"
USING_NS_CC;

class TestScene :public Layer,public DJShapeButtonDelegate{

public:
    static Scene* createScene();
    virtual bool init();

    CREATE_FUNC(TestScene);
    void buttonCallBack(DJShapeButton* sender);

};

#endif /* defined(__maptest__TestScene__) */
        DJShapeButton* djShapeBtn  = DJShapeButton::create("res/red/1300_r.png");
        djShapeBtn->setDelegate(this);
        //设置tag
        djShapeBtn->setShapeBtnTag(1000);
        djShapeBtn->setPosition(Point(0, 40));
        addChild(djShapeBtn);

回调函数

void TestScene::buttonCallBack(DJShapeButton *sender)
{
    log("%d",sender->getTag());
}

DJShapeButton.h不规则形状Button类

//
//  DJShapeButton.h
//  maptest
//
//  Created by 杜甲 on 14-5-18.
//
//

#ifndef __maptest__DJShapeButton__
#define __maptest__DJShapeButton__

class DJShapeButton;

class DJShapeButtonDelegate {

public:
    virtual void buttonCallBack(DJShapeButton* sender) = 0;

};

#include "cocos2d.h"
#include "ui/CocosGUI.h"

USING_NS_CC;

class DJShapeButton :public ui::Layout{

public:
    static DJShapeButton* create(const std::string& normalImage);

    CC_SYNTHESIZE(DJShapeButtonDelegate*, _delegateBtn, Delegate);

    virtual bool init(const std::string& normalImage);

    CC_SYNTHESIZE_RETAIN(Sprite*,  shapeBtn, ShapeBtn);

    void setShapeBtnTag(int tag);
private:
    bool isSwallow ;

};

#endif /* defined(__maptest__DJShapeButton__) */

DJShapeButton.cpp

//
//  DJShapeButton.cpp
//  maptest
//
//  Created by 杜甲 on 14-5-18.
//
//

#include "DJShapeButton.h"
DJShapeButton* DJShapeButton::create(const std::string &normalImage)
{
    DJShapeButton *pRet = new DJShapeButton();
    if (pRet && pRet->init(normalImage))
    {
        pRet->autorelease();
        return pRet;
    }
    else
    {
        delete pRet;
        pRet = NULL;
        return NULL;
    }

}
bool DJShapeButton::init(const std::string &normalImage)
{
    bool bRet = false;
    do {
        CC_BREAK_IF(!ui::Layout::init());

        Image* myImg = new Image();
        myImg->initWithImageFile(normalImage);

        Texture2D* temp = new Texture2D();
        temp->initWithImage(myImg);

        shapeBtn =Sprite::createWithTexture(temp);

        log("%f,%f",shapeBtn->getAnchorPoint().x ,shapeBtn->getAnchorPoint().y);
        log("width = %f,height = %f",shapeBtn->getContentSize().width , shapeBtn->getContentSize().height);

        addChild(shapeBtn);

        this->setSize(shapeBtn->getContentSize());
        shapeBtn->setPosition(Point(getSize().width / 2, getSize().height / 2));

        auto listener1 = EventListenerTouchOneByOne::create();

        listener1->onTouchBegan = [=](Touch* touch, Event* event)
        {
            auto target = static_cast<Sprite*>(event->getCurrentTarget());
            Point locationInNode = target->convertToNodeSpace(touch->getLocation());
            Color4B c = {0,0,0,0};

            Point pt = Point(locationInNode.x, target->getContentSize().height - locationInNode.y);

            Size s = target->getContentSize();
            Rect rect = Rect(0, 0, s.width, s.height);

            if (rect.containsPoint(locationInNode)) {
                log("sprite began... x = %f, y = %f", locationInNode.x, locationInNode.y);

                unsigned int x = pt.x, y = pt.y;
                unsigned char* data = myImg->getData();
                unsigned int* pixel = (unsigned int*)data;
                pixel = pixel + (y * 116) + x;
                c.r = *pixel & 0xff;
                c.g = (*pixel >> 8 ) & 0xff;
                c.b = (*pixel >> 16) & 0xff;
                c.a = (*pixel >> 24) & 0xff;
                log("8888888888%d",c.a);
                if (c.a <= 4) {
                    isSwallow = false;
                }else
                {
                    isSwallow = true;

                }

            }else{
                isSwallow = false;
            }

            listener1->setSwallowTouches(isSwallow);

            return isSwallow;
        };

        listener1->onTouchEnded =  [=](Touch* touch, Event* event)
        {
            if (_delegateBtn != nullptr) {
                _delegateBtn->buttonCallBack(this);
            }
        };

        _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, shapeBtn);

        bRet = true;
    } while (0);
    return bRet;
}

void DJShapeButton::setShapeBtnTag(int tag)
{
    shapeBtn->setTag(tag);
    setTag(tag);

}

Jython的安装及简单例子

时间: 2024-10-28 02:33:00

Jython的安装及简单例子的相关文章

Weka安装和一简单例子入门

Download from http://www.cs.waikato.ac.nz/ml/weka for Windows, Mac, Linux 安装,可改路径 安好,如下 运行 点开erxplore,出现 点open file,打开数据文件 安装目录下又点数据文件,如下图的data文件夹里,也可讲其复制到常用的文件夹里,方便每次使用. 打开数据文件夹的一个数据文件为例,如weather.nominal 之后这样的界面,多观察看看各种属性和标签按钮,慢慢熟悉 点击edit按钮,出现如下数据的表

python requests的安装与简单运用

requests是Python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib2提供了大部分需要的HTTP功能,但是API太逆天了,一个简单的功能就需要一大堆代码. 我也看了下requests的文档,确实很简单,适合我这种懒人.下面就是一些简单指南. 插播个好消息!刚看到requests有了中文翻译版,建议英文不好的看看,内容也比我的博客好多了,具体链接是:http://cn

memcache的windows下的安装和简单使用

原文:memcache的windows下的安装和简单使用 memcache是为了解决网站访问量大,数据库压力倍增的解决方案之一,由于其简单实用,很多站点现在都在使用memcache,但是memcache缺点之一却是缺少安全性验证,所以一般而言我们都会把一些访问量大,但是不需要验证的数据放在这里,需要用的时候来这里取,就给数据库减少了很多的负担.一般而言设定个更新时间就好了,1个小时左右更新一次. windows下安装和测试memcache最为方便,Linux只是需要相应的编译包就行了,需要包括m

mybatis入门学习之(1)+简单例子测试

Mybatis 入门之(1)环境配置+简单例子测试 什么是MyBatis? 它是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的XML或注解用于配置和原始映射,将接口和POJOs(Plan Old Java Objects,普通的 Java对象)映射成数据库中的记录. 其实简单一点说mybatis就是一直访问数据库的技术,它是现在比较流行的一个持久层框架,如果你对JDBC熟悉那就更容易

从两个简单例子窥视协程的惊人性能

我们用普通同步方式扫描10个端口,用协程(异步)方式扫描1000个端口,对比时间. 1.同步方式代码 #encoding=utf-8 #author: walker #date: 2014-07-16 #function: 使用同步方式扫描10个端口 import time, socket, sys def task(addr): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(100) try:

interbase C++Builder 简单例子

interbase C++Builder  的例子,网上找了半天也没找到合适的,下面是一般能搜索到的文章,现在整理下: 下面我以interbase―――C++Builder,介绍一个简单的例子(不过很详细). 为什么选择interbase呢?因为它的安装很简单,但配置等各方面却跟其它数据库差不了多少.选择C++Builder,一来是它更容易跟interbase结合,二来它的数据库编程比较简单易学. 一.建立自己的数据库(这里先只是建立一个数据库文件,为连接之用,后边在建立它的table) 首先在

【转载】CANoe 入门 Step by step系列(三)简单例子的剖析

来源:http://www.cnblogs.com/dongdonghuihui/archive/2012/09/26/2704623.html 最好的学习方式是什么?模仿.有人会问,那不是山寨么?但是我认为,那是模仿的初级阶段,当把别人最好的设计已经融化到自己的血液里,变成自己的东西,而灵活运用的时候,才是真正高级阶段.正所谓画虎画皮难画骨.但初级阶段仍然是必须经历的过程,他会使你在达到高级阶段的过程中少走很多弯路,下面我们来迈出这一步.先研究一下别人的简单例子. 最好的例子莫过于Vector

转: python requests的安装与简单运用

requests是Python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢? 官方文档中是这样说明的: python的标准库urllib2提供了大部分需要的HTTP功能,但是API太逆天了,一个简单的功能就需要一大堆代码. 插播个好消息!刚看到requests有了中文翻译版,建议英文不好的看看,内容也比我的博客好多了,具体链接是:http://cn.python-requests.org/en/latest/(不过是v1.1.0版

(转)python requests的安装与简单运用

requests是python的一个HTTP客户端库,跟urllib,urllib2类似,那为什么要用requests而不用urllib2呢?官方文档中是这样说明的: python的标准库urllib2提供了大部分需要的HTTP功能,但是API太逆天了,一个简单的功能就需要一大堆代码. 我也看了下requests的文档,确实很简单,适合我这种懒人.下面就是一些简单指南. 插播个好消息!刚看到requests有了中文翻译版,建议英文不好的看看,内容也比我的博客好多了,具体链接是:http://cn