一、有哪些坐标系
1.屏幕坐标系
标准屏幕坐标系使用和OpenGL不同的坐标系,而Cocos2d则使用和OpenGL相同的坐标系。iOS, Android, Windows Phone等在开发应用时使用的是标准屏幕坐标系,原点为屏幕左上角,x向右,y向下。Cocos2d坐标系和OpenGL坐标系一样,原点为屏幕左下角,x向右,y向上。
四、拖动节点设计和实现
setPosition(ccp(winSize.width / 2, winSize.height / 2));
bg->setTag(TAG_BG);
CCSprite* sprite = CCSprite::create("CloseNormal.png");
addChild(sprite);
sprite->setPosition(ccp(winSize.width / 2, winSize.height / 2));
sprite->setZOrder(1);
sprite->setTag(TAG_SPRITE);
setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);
return true;
}
bool T05ODERandTag::ccTouchBegin(CCTouch *pTouch, CCEvent *pEvent)
{
CCNode* node = getChildByTag(TAG_SPRITE);
node->setZOrder(0 - node->getZOrder());
return false;
}
#ifndef __T04DrawNode_H__
#define __T04DrawNode_H__
#include "f:\cocos2dx\cocos2d-x-2.2.6\cocos2dx\layers_scenes_transitions_nodes\cclayer.h"
#include "cocos2d.h"
USING_NS_CC;
class T04DrawNode : public CCLayer
{
public:
T04DrawNode(void);
~T04DrawNode(void);
static CCScene* scene();
CREATE_FUNC(T04DrawNode);
bool init();
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
CCSprite* _sprite;
};
#endif
#include "T04DrawNode.h"
T04DrawNode::T04DrawNode(void)
{
}
T04DrawNode::~T04DrawNode(void)
{
}
CCScene* T04DrawNode::scene()
{
CCScene* scene = CCScene::create();
T04DrawNode* layer = T04DrawNode::create();
scene->addChild(layer);
return scene;
}
bool T04DrawNode::init()
{
CCLayer::init();
CCSprite* sprite = CCSprite::create("CloseNormal.png");
addChild(sprite);
sprite->setPosition(ccp(100, 100));
setTouchEnabled(true);
setTouchMode(kCCTouchesOneByOne);
_sprite = sprite;
return true;
}
bool T04DrawNode::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
// rc描述了精灵所占用的矩形,包括位置和大小
CCRect rc=_sprite->boundingBox();
// 鼠标按下的位置
CCPoint pt = pTouch->getLocation();
// 只有当鼠标点中精灵的时候,ccTouchMoved才要被调用
return rc.containsPoint(pt);
}
void T04DrawNode::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{
CCPoint ptDelta = pTouch->getDelta();
CCPoint oldPos = _sprite->getPosition();
CCPoint newPos = oldPos + ptDelta;
_sprite->setPosition(newPos);
}