【平凡曉聲 Cocos2d-x】虛擬按鍵控制精靈移動1
阿新 • • 發佈:2019-01-11
虛擬按鍵控制精靈移動1
最近想做過街機類的遊戲,做這類遊戲,首先我想到的就是精靈的移動,就是當按鍵按下時,精靈進行移動,當按鍵擡起時,精靈停止移動。
查閱了相關資料,最後整理出了兩種方法分享給大家,廢話不多說了,開幹。
1.通過touch點選事件和schedule計劃任務控制精靈移動
1.1首先要給場景加個背景圖:
auto backGround = Sprite::create("background/bg1.jpg"); backGround->setPosition(visibleSize.width / 2, visibleSize.height / 2); backGround->setScale(visibleSize.width / backGround->getContentSize().width, visibleSize.height / backGround->getContentSize().height); this->addChild(backGround, 0);
有的時候我們的圖片可能和視窗大小不一樣,所以我在setScanle的時候用了一個小技巧,為了能夠讓背景圖片填充滿視窗(不管圖片大還是小)。
1.2加入我們要用到的精靈(這裡我簡單的繪製了一個幀動畫)
void HelloWorld::hero_Move() { Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); Vector<SpriteFrame*> allframe; for (int i = 1; i <= 8; i++) { auto spFrame = SpriteFrame::create(StringUtils::format("39669-%d.png", i), Rect(0, 0, 150, 150)); allframe.pushBack(spFrame); } auto animation = Animation::createWithSpriteFrames(allframe, 0.2f); auto animate = Animate::create(animation); auto sp = Sprite::create(); sp->setPosition(visibleSize.width / 2, visibleSize.height / 2); sp->setScale(0.5); sp->setTag(1); this->addChild(sp); sp->runAction(RepeatForever::create(animate));}
這兩步完成如圖所示,接下來就是重頭戲了
1.3新增點選事件
.h檔案中
virtual bool onTouchBegan(Touch *touch, Event *unused_event);
virtual void onTouchMoved(Touch *touch, Event *unused_event);
virtual void onTouchEnded(Touch *touch, Event *unused_event);
//點選移動的計劃任務
void toch_Move(float dt);
.cpp檔案中
//處理點選互動事件 //新增監聽 auto listener = EventListenerTouchOneByOne::create(); //繫結回撥函式 listener->onTouchBegan = CC_CALLBACK_1(HelloWorld::onTouchBegan, this); listener->onTouchMoved = CC_CALLBACK_1(HelloWorld::onTouchMoved, this); listener->onTouchEnded = CC_CALLBACK_1(HelloWorld::onTouchEnded, this); //將回調函式新增到事件分發器中 Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); //點選滑鼠事件 bool HelloWorld::onTouchBegan(Touch *touch, Event *unused_event) { Point touchLocation = touch->getLocationInView(); Point touchLocation2 = Director::getInstance()->convertToGL(touchLocation); //獲取滑鼠座標點,並判斷是否在一定的範圍內,如果是,精靈移動 if (touchLocation2.x > 820 && touchLocation2.y < 100) { this->schedule(schedule_selector(HelloWorld::toch_Move), 0.2); } return true; } //移動滑鼠 void HelloWorld::onTouchMoved(Touch *touch, Event *unused_event) { } //停止點選 void HelloWorld::onTouchEnded(Touch *touch, Event *unused_event) { //停止點選,取消計劃任務 this->unschedule(schedule_selector(HelloWorld::toch_Move)); } //計劃任務 void HelloWorld::toch_Move(float dt) { this->getChildByTag(1)->setPositionX(this->getChildByTag(1)->getPositionX() + 15); }
如圖:
右下的按鈕我只是加了一張圖片,所以沒有點選效果
要去開會了,今天就先到這,下次給大家分享如何用按鈕來實現控制精靈移動,有點選效果哦。
轉載請註明出去,謝謝合作。