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를 받아서 해당 이벤트에 대한 추가적 로직을 넣는 것도 나쁘지 않아 보인다.
'Programming > Cocos2d-x (with. cpp & java )' 카테고리의 다른 글
cocos2d-x 3.17.2 Expression: child != nullptr 에러 (0) | 2019.09.01 |
---|---|
안드로이드 인앱결제 (0) | 2019.02.01 |
cocos2d-x Project windows 인스톨 파일(with. NSIS) (0) | 2018.12.28 |
cocos2d-x ui::EditBox 사용시 로그 : [Edit text] content size 출력 (0) | 2018.12.27 |
cocos2d 3.17 box2d (0) | 2018.12.24 |