首页 > 代码库 > 精灵随手指移动起来

精灵随手指移动起来

效果图:



程序代码:

bool HelloWorld::init(){    //////////////////////////////    // 1. super init first    if ( !CCLayer::init() )    {        return false;    }        CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();    /////////////////////////////    // 2. add a menu item with "X" image, which is clicked to quit the program    //    you may modify it.    // add a "close" icon to exit the progress. it‘s an autorelease object    CCMenuItemImage *pCloseItem = CCMenuItemImage::create(                                        "CloseNormal.png",                                        "CloseSelected.png",                                        this,                                        menu_selector(HelloWorld::menuCloseCallback));    	pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 ,                                origin.y + pCloseItem->getContentSize().height/2));    // create menu, it‘s an autorelease object    CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);    pMenu->setPosition(CCPointZero);    this->addChild(pMenu, 1);	setTouchEnabled(true);	sp1 = CCSprite::create("cpp1.png");	sp1->setScale(0.5f);	sp1->setPosition(ccp(100, 200));	this->addChild(sp1);    return true;}//触摸移动void HelloWorld::ccTouchMoved(CCTouch* touch, CCEvent* event){		if (iscontrol)	{		CCPoint location = touch->getLocationInView();		location = CCDirector::sharedDirector()->convertToGL(location);		CCLOG("ccTouchMoved...x:%f y:%f", location.x, location.y);		//移动时重新设置sprite坐标		float x = location.x-deltax;		float y = location.y-deltay;		sp1->setPosition(ccp(x, y));	}}	//触摸开始点击,计算该点坐标与sprite坐标差值bool HelloWorld::ccTouchBegan(CCTouch* touch, CCEvent* event){			CCPoint pos = sp1->getPosition();	CCPoint location = touch->getLocationInView();	location = CCDirector::sharedDirector()->convertToGL(location);//openGL	CCLOG("ccTouchBegan...x:%f y:%f", location.x, location.y);		if (location.x > 0 && location.x <960 &&		location.y >0 && location.y < 640)//触摸的矩形区域	{		iscontrol = true;		//计算触摸点与sprite的坐标差值		deltax = location.x-pos.x;		deltay = location.y-pos.y;	}		return true;}//触摸结束void HelloWorld::ccTouchEnded(CCTouch* touch, CCEvent* event){	CCLOG("ccTouchEnded...");	//iscontrol = false;}//注册触摸事件void HelloWorld::onEnter(){	CCDirector* pDirector = CCDirector::sharedDirector();	pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0, true);	CCLayer::onEnter();}void HelloWorld::onExit(){	CCDirector* pDirector = CCDirector::sharedDirector();	pDirector->getTouchDispatcher()->removeDelegate(this);	CCLayer::onExit();}