cocos2dx之如何实现自己的sprite

原创 2013年12月03日 16:03:54

可能在制作游戏的过程中,用到sprite,但是它本省的方法有限,我需要再次扩充它,那么我们可以通过继承得到自定义的sprite:

定义如下:

#ifndef MYSPRITEBASE_H_
#define MYSPRITEBASE_H_

#include "cocos2d.h"
USING_NS_CC;

class MySprite : public CCSprite, public CCStandardTouchDelegate
{
public:
    MySprite();
    ~MySprite();

public:

    CCRect rect();
    bool initWithTexture(CCTexture2D* aTexture);
    void onEnter();
    void onExit();
    bool containsTouchLocation(CCTouch* touch);
    void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
    void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
    void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);

    CCObject* copyWithZone(CCZone *pZone);
    void touchDelegateRetain();
    void touchDelegateRelease();

    static MySprite *paddleWithTexture(CCTexture2D* aTexture);
    static MySprite *create(CCTexture2D *pTexture);



}; //  end of MySprite

#endif //MYSPRITEBASE_H_

在这里我们采用的消息类是用到的:CCStandardTouchDelegate类。

当然也可以用:CCTargetedTouchDelegate


具体实现:

#include "MySpriteBase.h"


MySprite::MySprite() {
    CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
}

MySprite::~MySprite() {

}

CCRect MySprite::rect() {
    CCSize s = getTexture()->getContentSize();
    return CCRectMake(s.width / 2, -s.height / 2, s.width, s.height);
}

bool MySprite::initWithTexture(CCTexture2D* aTexture) {
    if( CCSprite::initWithTexture(aTexture) ) 
    {
        return true;
    }
    return false;
}

MySprite *MySprite::create(CCTexture2D *pTexture) {
    MySprite *pobSprite = new MySprite();
    if (pobSprite && pobSprite->initWithTexture(pTexture))
    {
        pobSprite->autorelease();
        return pobSprite;
    }
    CC_SAFE_DELETE(pobSprite);
}

void MySprite::onEnter() {

    CCSprite::onEnter();
}

void MySprite::onExit() {
    CCSprite::onExit();
}

bool MySprite::containsTouchLocation(CCTouch* touch) {
    return true;
}

void MySprite::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) {

}

void MySprite::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent) {

}

void MySprite::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent) {

}

CCObject* MySprite::copyWithZone(CCZone *pZone) {
    this->retain();
    return this;
}

void MySprite::touchDelegateRetain() {
    this->retain();
}

void MySprite::touchDelegateRelease() {
    this->release();
}

MySprite* paddleWithTexture(CCTexture2D* aTexture) {
    MySprite* pPaddle = new MySprite();
    pPaddle->initWithTexture( aTexture );
    pPaddle->autorelease();
    return pPaddle;
}


相关文章推荐

cocos2dx创造精灵的五种方法

 cocos2dx创建精灵的五种方法(包括使用图片名获取图片) // 创建精灵的五种方法 //方法一:直接创建精灵 //适合于要显示的是这张图片的全部区域,...

cocos2dx--sprite的理解

本文使用cocos2dx自带的hellocpp文件。 1. 先看sprite的创建,直接通过resource下的图片进行创建: 显示结果如下:红色箭头标注的人物就是通过图片创建的sprite。 使...

cocos2d-x开发游戏时,使用Texture packer来合并图片

write by 九天雁翎(JTianLing) -- www.jtianling.com Texture packer的确比Zwoptex更加强大,功能更多,跨平台,在使用cocos2d-...
  • vagrxie
  • vagrxie
  • 2011年08月24日 16:18
  • 16878

跟着BOY学习--史上最通俗易懂的连连看算法--cocos2d-x 环境下开发

[cpp] view plaincopy    兄弟们大家好,本来说好的是星期五出连连看的。不过被我给睡过去了,这些天一直都很瞌睡。不过睡眠好了做事的效率就高。希望...

探cocos2dx对游戏精灵(sprite_nodes)的实现。(源码版本2.2.3)

cocos2dx负责精灵功能相关代码在sprite_node里边,在这个文件夹里边有几个文件,主要涉及有几个类(所有名字以node结尾的文件模块均为渲染结点): CCAnimation: ...

在cocos2dx 3.x 中实现带颜色滤镜的Sprite

一.目的 cocos2dx做项目时经常会碰到要对图片进行变色的需求,最常用的就是变灰了,就要让按钮变灰来表示当前的状态是不可点的。 但是cocos2dx的Sprite中是没有这个变灰支持的。那么,就要...

关于在cocos2dx中继承Sprite的分析与技巧

本文章特指使用C++作为编程语言,基于cocos2dx游戏引擎开发游戏。   在cocos2dx中,sprite作为精灵类是使用最为频繁的类,与其它类相比,如:Node, Layer或Sc...

cocos2dx中精灵点击事件处理的两种方式——Sprite和ImageView

1. ImageView 的方式:封装的Widget组件ImageVIew实现了类似按钮的监听事件,所以处理起来很方便直接ImageView* _pPokerImageView; _pPokerI...

cocos2dx Sprite setBlendFunc 使用颜色混合:加算,减算

CCSprite有一个ccBlendFunc类型的blendFunc_结构体成员,可以用来设置描绘时的颜色混合方案。ccBlendFunc包含了一个src和一个dst,分别表示目标和源的运算因子。 ...

cocos2dx 3.4 Sprite

创建一个空的精灵  static Sprite* create(); 利用图片创建一个精灵     static Sprite* create(const std::string& filena...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2dx之如何实现自己的sprite
举报原因:
原因补充:

(最多只允许输入30个字)