SLIDE 6 Dynaspot: Hint, use the previous SM (cursor + area cursor)
21
Start cursor
(*1)
SM cursor
Area Cursor
(*2) /
Disarm WIDTH = maxWidth
(*2)
SM area cursor Reduce Size
(*1) /
Arm (Reducetime) // starts changing WIDTH TimeOut // forced to leave state Mouse Move & (MousePos – Prev MousePos) /Time < MAXSPEED (*1) Mouse Move & (MousePos – Prev MousePos) /Time > MAXSPEED (*2)
(*2) (*2) (*1) (*1)
22
Example (Interaction)
Imagine you are asked to program the following behavior:
When I drag a circle over another, the second circle starts moving to the opposite direction so that they do not overlap (it is pushed) How would you program this (what events would you listen for, what tests would you do, how would you move/change the position of the second object, etc)?
Assume you know your mouse position, you are dragging the first circle from its center, you know the radius of your circles (r1,r2), and you can calculate the intersections of objects.
23
Example (Interaction)
- We will need a Window with a layout to draw ellipses in.
- We’ll need a mouse listener attached on the main Pane.
- At mouse click if an ellipse is selected (under cursor position), and
while dragging:
- we store the mouse position (prevx, prevy)
- we if ellipse1 touches ellipse2, ellipse1.intersects(ellipse2).
- If it does not intersect, then I move ellipse1 normally
- If it does intersect, I still move ellipse1 as before, but I also move
- ellipse2. The new position for ellipse2 will be the previous position
+ dx, dy (where dx = mousex-prevx, and dy – mousey-prevy)
24 week7b-ExamPrep - 24 October 2018