TestTouches.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. #pragma once
  2. #include "test.h"
  3. class TestTouches: public Test
  4. {
  5. public:
  6. spTextField txtMove;
  7. spTextField txtClick;
  8. spTextField txtUp;
  9. float y;
  10. int n;
  11. spTextField click;
  12. spSprite createRect(const char* name, const Color& color, const Vector2& pos, const Vector2& size)
  13. {
  14. spSprite orange = new ColorRectSprite;
  15. orange->setColor(color);
  16. orange->setName(name);
  17. orange->setSize(size);
  18. orange->setPosition(pos);
  19. orange->attachTo(content);
  20. //orange->setAlpha(200);
  21. orange->addEventListener(TouchEvent::OVER, CLOSURE(this, &TestTouches::onOver));
  22. orange->addEventListener(TouchEvent::OUT, CLOSURE(this, &TestTouches::onOver));
  23. orange->addEventListener(TouchEvent::TOUCH_DOWN, CLOSURE(this, &TestTouches::onDownUp));
  24. orange->addEventListener(TouchEvent::TOUCH_UP, CLOSURE(this, &TestTouches::onDownUp));
  25. orange->addEventListener(TouchEvent::MOVE, CLOSURE(this, &TestTouches::onMove));
  26. spTextField tf = new TextField;
  27. tf->setText("");
  28. tf->setColor(Color::Black);
  29. tf->setName("state1");
  30. tf->setX(5);
  31. tf->setY(5);
  32. tf->attachTo(orange);
  33. tf = new TextField;
  34. tf->setText("");
  35. tf->setColor(Color::Black);
  36. tf->setName("state2");
  37. tf->setX(35);
  38. tf->setY(5);
  39. tf->attachTo(orange);
  40. tf = new TextField;
  41. tf->setText("");
  42. tf->setColor(Color::Black);
  43. tf->setName("local");
  44. tf->setX(5);
  45. tf->setY(25);
  46. tf->setMultiline(true);
  47. tf->setWidth(orange->getWidth());
  48. tf->attachTo(orange);
  49. return orange;
  50. }
  51. void onOver(Event* ev)
  52. {
  53. spSprite s = safeSpCast<Sprite>(ev->currentTarget);
  54. spTextField tf = s->getChildT<TextField>("state1");
  55. tf->setText(ev->type == TouchEvent::OVER ? "over" : "");
  56. updateLocalPos(ev);
  57. }
  58. void onDownUp(Event* ev)
  59. {
  60. spSprite s = safeSpCast<Sprite>(ev->currentTarget);
  61. spTextField tf = s->getChildT<TextField>("state2");
  62. tf->setText(ev->type == TouchEvent::TOUCH_DOWN ? "pressed" : "");
  63. updateLocalPos(ev);
  64. }
  65. void updateLocalPos(Event* ev)
  66. {
  67. spSprite s = safeSpCast<Sprite>(ev->currentTarget);
  68. spTextField tf = s->getChildT<TextField>("local");
  69. if (ev->type != TouchEvent::OUT)
  70. {
  71. TouchEvent* te = safeCast<TouchEvent*>(ev);
  72. char str[255];
  73. safe_sprintf(str, "loc.pos: %d,%d", (int)te->localPosition.x, (int)te->localPosition.y);
  74. tf->setText(str);
  75. }
  76. else
  77. tf->setText("");
  78. }
  79. void onMove(Event* ev)
  80. {
  81. updateLocalPos(ev);
  82. }
  83. TestTouches()
  84. {
  85. y = 0;
  86. n = 0;
  87. txtClick = createTF(Color::White);
  88. txtUp = createTF(Color::Green);
  89. txtMove = createTF(Color::Yellow);
  90. spSprite Orange = createRect("Orange", Color::Orange, Vector2(200, 200), Vector2(300, 300));
  91. Orange->attachTo(content);
  92. spSprite Green = createRect("Green", Color::Green, Vector2(100, 25), Vector2(100, 150));
  93. Green->attachTo(Orange);
  94. spSprite Beige = createRect("Beige", Color::Beige, Vector2(150, 150), Vector2(250, 100));
  95. Beige->attachTo(Orange);
  96. spSprite LightGreen = createRect("LightGreen", Color::LightGreen, Vector2(180, -50), Vector2(50, 200));
  97. LightGreen->attachTo(Beige);
  98. spActor target = Orange;
  99. target->addEventListener(TouchEvent::CLICK, CLOSURE(this, &TestTouches::event));
  100. target->addEventListener(TouchEvent::MOVE, CLOSURE(this, &TestTouches::event));
  101. target->addEventListener(TouchEvent::TOUCH_UP, CLOSURE(this, &TestTouches::event));
  102. }
  103. spTextField createTF(const Color& c)
  104. {
  105. spTextField tf = new TextField;
  106. tf->attachTo(content);
  107. tf->setWidth(300);
  108. tf->setColor(c);
  109. tf->setX(content->getWidth() - tf->getWidth());
  110. tf->setY(y);
  111. tf->setMultiline(true);
  112. tf->setFont(Test::resourcesUI.getResFont("big"));
  113. y += 200;
  114. return tf;
  115. }
  116. void event(Event* ev)
  117. {
  118. TouchEvent* te = safeCast<TouchEvent*>(ev);
  119. spTextField tf;
  120. const char* eventName = "";
  121. if (te->type == TouchEvent::CLICK)
  122. {
  123. tf = txtClick;
  124. eventName = "CLICK";
  125. notify("click");
  126. }
  127. if (te->type == TouchEvent::MOVE)
  128. {
  129. tf = txtMove;
  130. eventName = "MOVE";
  131. }
  132. if (te->type == TouchEvent::TOUCH_UP)
  133. {
  134. tf = txtUp;
  135. eventName = "UP";
  136. notify("up");
  137. }
  138. char str[512];
  139. safe_sprintf(str,
  140. "%d)touch event: %s\n"
  141. "target: %s\n"
  142. "position: %d %d\n"
  143. "\n"
  144. "current target: %s\n"
  145. "local position: %d %d\n"
  146. ,
  147. n,
  148. eventName,
  149. te->target->getName().c_str(),
  150. (int)te->position.x, (int)te->position.y,
  151. te->currentTarget->getName().c_str(),
  152. (int)te->localPosition.x, (int)te->localPosition.y
  153. );
  154. tf->setText(str);
  155. ++n;
  156. }
  157. };