//
// AudioSprite.h
// Ming
//
// Created by admin on 12-9-6.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#ifndef Ming_AudioSprite_h
#define Ming_AudioSprite_h
#include "cocos2d.h"
using namespace cocos2d;
class AudioSprite : public CCSprite, public CCTouchDelegate{
public:
virtual bool init();
virtual void onEnter();
virtual void onExit();
AudioSprite();
~AudioSprite();
CCRect rect();
bool containsTouchLocation(cocos2d::CCTouch *touch) ;
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) ;
// optional
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) ;
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
// optional
virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent) ;
virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent) ;
virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);
virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent) ;
virtual void touchDelegateRetain();
virtual void touchDelegateRelease();
private:
CCSprite *voiceSprite;
};
#endif
########################################################################################################################
//
// AudioSprite.cpp
// Ming
//
// Created by admin on 12-9-6.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#include <iostream>
#include "AudioSprite.h"
bool AudioSprite::init(){
if(!CCSprite::init()){
return false;
}
return true;
}
AudioSprite::AudioSprite(){
}
AudioSprite::~AudioSprite(){
}
void AudioSprite::onEnter(){
CCSprite::onEnter();
CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);
CCSize size = getContentSize();
CCSprite* allSprite=new CCSprite();
allSprite->init();
allSprite->setTextureRect(CCRectMake(0, 0, size.width, size.height));
allSprite->setPosition(ccp(size.width /2,size.height/2));
allSprite->setColor(ccc3(255,255,255));
this->addChild(allSprite);
voiceSprite=new CCSprite();
voiceSprite->init();
voiceSprite->setTextureRect(CCRectMake(0,0,0,size.height));
voiceSprite->setColor(ccRED);
voiceSprite->setAnchorPoint(ccp(0,0));
voiceSprite->setPosition(ccp(0,0));
this->addChild(voiceSprite);
}
CCRect AudioSprite::rect()
{
CCSize size = getContentSize();
CCPoint pos = getPosition();
return CCRectMake(pos.x - size.width / 2, pos.y - size.height / 2, size.width, size.height);
}
bool AudioSprite::containsTouchLocation(cocos2d::CCTouch *touch)
{
CCPoint touchPoint = touch->locationInView(touch->view());
touchPoint = CCDirector::sharedDirector()->convertToGL(touchPoint);
return CCRect::CCRectContainsPoint(rect(), touchPoint);
}
bool AudioSprite::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) {
if(!this->containsTouchLocation(pTouch)){
return false;
}
CCPoint point = this->convertTouchToNodeSpaceAR(pTouch);
CCPoint ptNode = convertTouchToNodeSpace(pTouch);
CCPoint WorldNode1= convertToWorldSpace(ccp(0,0));
CCPoint WorldNode2= convertToNodeSpace(ccp(0,0));
//带锚点就是一锚点为(0,0)点 不带锚点就是左下角为原点 convertToNodeSpaceAR是Node锚点为原点 屏幕的(0,0)为左下角
CCPoint WorldNode3= convertToNodeSpaceAR(ccp(0,0));
//带锚点就是一锚点为(0,0)点 不带锚点就是左下角为原点 convertToWorldSpaceAR是Node锚点为原点 屏幕的(0,0)为左下角
CCPoint WorldNode4 = convertToWorldSpaceAR(ccp(0,0));
printf("point.x:%f;point.y:%f\n",point.x,point.y);
printf("ptNode.x:%f;ptNode.y:%f\n",ptNode.x,ptNode.y);
printf("WorldNode1.x:%f;WorldNode1.y:%f\n",WorldNode1.x,WorldNode1.y);
printf("WorldNode2.x:%f;WorldNode2.y:%f\n",WorldNode2.x,WorldNode2.y);
printf("WorldNode3.x:%f;WorldNode3.y:%f\n",WorldNode3.x,WorldNode3.y);
printf("WorldNode4.x:%f;WorldNode4.y:%f\n",WorldNode4.x,WorldNode4.y);
return true;
}
// optional
void AudioSprite::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) {
CCPoint touchLocation = pTouch->locationInView( pTouch->view());
touchLocation = CCDirector::sharedDirector()->convertToGL( touchLocation );
CCSize size = getContentSize();
CCPoint pos = getPosition();
float initx=pos.x-size.width/2;
printf("%f,%f\n",pos.x,touchLocation.x);
if(touchLocation.x<initx){
voiceSprite->setTextureRect(CCRectMake(0,0,0,size.height));
}else if(touchLocation.x>initx+size.width){
voiceSprite->setTextureRect(CCRectMake(0,0,size.width,size.height));
}else{
if(touchLocation.x-initx>0){
if(touchLocation.x-initx>size.width){
voiceSprite->setTextureRect(CCRectMake(0,0,size.width,size.height));
}else{
voiceSprite->setTextureRect(CCRectMake(0,0,touchLocation.x-initx,size.height));
}
}else{
voiceSprite->setTextureRect(CCRectMake(0,0,0,size.height));
}
}
}
void AudioSprite::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){
ccTouchMoved(pTouch, pEvent);
}
void AudioSprite::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent){
}
// optional
void AudioSprite::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent){
}
void AudioSprite::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent){
}
void AudioSprite::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent){
}
void AudioSprite::ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent) {
}
void AudioSprite::touchDelegateRetain() {
}
void AudioSprite::touchDelegateRelease(){
}
void AudioSprite::onExit(){
cocos2d::CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);
}