본문 바로가기

Programming/Cocos2d-x (with. cpp & java )

Cocos2d-x ui::widget::Slider OnTouchMoved 체크

ui::Widget::Slider에 보면 onTouchBegan / onTouchMoved / onTouchEnded / onTouchCancelled등의 함수가 있다.

그리고 addTouchEventListener도 있다.

뭐.. addClickEventListener도 있다.

근데 ClickEvent는 파라미터를 Ref* r 받고, 터치의 타입은 받지 않는다.


나는 터치를 하고(=Began), 드래그(=Moved) 후에 뗐을때(=Ended) 각기 다른 로직을 짜고 싶었다.

위와 같이 구현했을 시 터치 후 Slider바 이동시 Moved가 체크되지 않는다

(터치 시작인 Began과 터치 끝인 Ended는 잘 체크 된다)


cocos2d-x/cocos/ui/UISlider.h


cocos2d-x/cocos/ui/UISlider.cpp


(현재 [19.01.18기준/3.17] github에 올라가있는 코드다)


위의 이미지는 ui/UISlider.cpp 의 소스이다. Widget을 상속받는다.

그리고 선언시 virtual ~~~ override 되어 있어서 재정의를 하려 했으나 알수 없는 실패(?) 아마 멍청해서 실패한듯 싶다

결국 원본을 수정하기로 했다.


다른 OnTouch[#Event]함수들을 보면 터치값과 이벤트 값을 다 Widget::OnTouch[#Event]로 넘겨주는데 Moved만 없다.

OnTouchMoved함수에

Widget::onTouchMoved(touch, unusedEvent)를 추가해주면 된다.


좀더 실력이 된다면 파라미터로 std::function를 받아서 해당 이벤트에 대한 추가적 로직을 넣는 것도 나쁘지 않아 보인다.