1. 程式人生 > >【平凡曉聲 Cocos2d-x】虛擬按鍵控制精靈移動1

【平凡曉聲 Cocos2d-x】虛擬按鍵控制精靈移動1

虛擬按鍵控制精靈移動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);
}

如圖:
這裡寫圖片描述

右下的按鈕我只是加了一張圖片,所以沒有點選效果
要去開會了,今天就先到這,下次給大家分享如何用按鈕來實現控制精靈移動,有點選效果哦。

轉載請註明出去,謝謝合作。