今天看啥
热点:

转载请注明出处:http://blog.csdn.net/oyangyufu/article/details/25656673

效果图:


 

CCTouch类装载了触摸点的信息,包括触摸点的横纵坐标值和触摸点的ID号,如获取触摸点转GL坐标:

	CCPoint point = pTouch->getLocationInView();
	point = CCDirector::sharedDirector()->convertToGL(point);


创建触摸事件流程:首先开启setTouchEnabled(true), 然后重写registerWithTouchDispatcher调用触摸代理函数addTargetedDelegate允许布景层接收触摸事件,再重写ccTouchBegan、ccTouchMoved、ccTouchEnded、ccTouchCancelled函数

 

程序代码:

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();
}



www.bkjia.comtruehttp://www.bkjia.com/Androidjc/776961.htmlTechArticle转载请注明出处: http://blog.csdn.net/oyangyufu/article/details/25656673 效果图: CCTouch类装载了触摸点的信息,包括触摸点的横纵坐标和触摸点的I...

相关文章

相关搜索: cocos2d-x

帮客评论

视觉看点