天天看點

從Delphi開始學Cocos2dx-3.0[5]:滑鼠按下移動彈起與單點觸摸

在Delphi 裡面的三個基本的滑鼠操作事件是

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single);
begin

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin

end;
           

再 cocos裡面其實也是差不多的

首先重寫 Layer的 onEnter函數

//HelloWorldScene.h


 virtual void onEnter() override;
           

然後在onEnter裡面綁定事件

void THelloWorld::onEnter()
{
	TLayer::onEnter();  

	// 建立一個監聽事件
	auto listener = TEventListenerTouch::create(dmOneByOne);
	//如果不加入此句消息依舊會向下傳遞 
    listener->setSwallowTouches(true);
    
	// 綁定事件
    listener->onTouchBegan = CC_CALLBACK_2(THelloWorld::onTouchBegan, this);
    listener->onTouchMoved = CC_CALLBACK_2(THelloWorld::onTouchMoved, this);
    listener->onTouchEnded = CC_CALLBACK_2(THelloWorld::onTouchEnded, this);
    
	TEventDispatcher::getInstance()->addEventListenerWithSceneGraphPriority(listener, this);
}
           

這和在Delphi中綁定事件幾乎是一樣的做法

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.OnMouseDown := FormMouseDown;
  Form1.OnMouseMove := FormMouseMove;
  Form1.OnMouseUp   := FormMouseUp;
end;
           

接下來開始寫,綁定的事件

// 觸摸事件
    bool onTouchBegan(TTouch* touch, TEvent* event);
    void onTouchMoved(TTouch* touch, TEvent* event);
    void onTouchEnded(TTouch* touch, TEvent* event);
           
bool THelloWorld::onTouchBegan(TTouch* touch, TEvent* event)
{
    CCLOG("THelloWorld::onTouchBegan id = %d, x = %f, y = %f", touch->getID(), touch->getLocation().x, touch->getLocation().y);
    return true;
}

void THelloWorld::onTouchMoved(TTouch* touch, TEvent* event)
{    
    CCLOG("THelloWorld::onTouchMoved id = %d, x = %f, y = %f", touch->getID(), touch->getLocation().x, touch->getLocation().y);
}


void THelloWorld::onTouchEnded(TTouch* touch, TEvent* event)
{
   CCLOG("THelloWorld::onTouchEnded id = %d, x = %f, y = %f", touch->getID(), touch->getLocation().x, touch->getLocation().y);
} 
           

繼續閱讀