René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

Hit test [Ming wrapper example]

This example demonstrates the Action Script function hitTest.
When the mouse is pressed, it is checked whether it is pressed on a shape or not. If so, the shape can then be dragged.
See also Dragging.html and Dragging II.
This flash movie was created with the following program.
HitTest.cpp
#include "SWFMovie.h"

void AddDragable(Movie& movie, Shape shape, int x, int y) {
  static Action mouseDown(
      "if (!_root.isDragging && "
      "      hitTest(_root._xmouse,_root._ymouse, true)) "
      "  { _root.isDragging = true; startDrag();};"
  );

  static Action mouseUp(
      "if ( _root.isDragging) "
      "  { _root.isDragging =false; stopDrag ();};"
  );

  MovieClip clip;
  clip.Add(shape);

  DisplayClip iClip = movie.Add(clip);
  iClip.MoveTo( x, y);

  iClip.OnMouseDown(mouseDown);
  iClip.OnMouseUp  (mouseUp  );

  clip.NextFrame();
}

int main() {
  Movie movie ("HitTest.swf", 400, 400 /*, 15, 7*/);

  movie.BackgroundColor(0x33, 0x44, 0x55);

  Shape shape;

  shape.FillStyle(0xff, 0x7f, 0x00);
  shape.Line( 100,   0);
  shape.Line(   0, 100);
  shape.Line(-100,   0);
  shape.Line(   0,-100);

  AddDragable(movie, shape, 50,  70);
  AddDragable(movie, shape, 90, 220);

  Shape redLine;
  redLine.LineStyle( 3, 0xff, 0x00, 0x00);
  redLine.LineTo   (12, 14);
  redLine.LineTo   (42, 75);
  redLine.LineTo   (18,-12);
  AddDragable      (movie, redLine, 150, 180);

  Shape greenLine;
  greenLine.LineStyle( 3, 0x00, 0xff, 0x7f);
  greenLine.LineTo   ( 12, 14);
  greenLine.LineTo   ( 72, 35);
  greenLine.LineTo   (-18, 42);
  AddDragable      (movie, greenLine, 250, 180);

	movie.NextFrame();

	return 0;
}
This is one of a series of examples that demonstrates the C++ ming wrapper classes. Other examples can be found here.