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

Following the mouse [Ming wrapper example]

This example demonstrates how the the location of the mouse can be detected.
It is adapted from this example.
This flash movie was created with the following program.
FollowMouse.cpp
#include <iostream>

#include "SWFMovie.h"

int main() {
  /* see 
         http://sourceforge.net/mailarchive/forum.php?thread_id=5916402&forum_id=9823 
     on Ming_useSWFVersion(4)
  */
  //Ming_useSWFVersion(4);

  Movie  movie   ("FollowMouse.swf", 320, 240, 12, 4);
  movie.BackgroundColor(0, 0, 0);

  MovieClip movieClip;

  // TODO: AddScout or something for exactly this
  //       purpose here
  DisplayItem iMouse = movie.Add(movieClip);
  iMouse.Name("mouse");

  movie.Add(Action("startDrag(/mouse, true);"));

  Morph morph;
  Shape shape_begin = morph.ShapeStart();
  Shape shape_end   = morph.ShapeEnd  ();

  shape_begin.FillStyle(255, 255, 255);
  shape_begin.MoveTo   (-40, -40);
  shape_begin.Line     ( 80,   0);
  shape_begin.Line     (  0,  80);
  shape_begin.Line     (-80,   0);
  shape_begin.Line     (  0, -80);

  shape_end  .FillStyle(  0,   0,   0);
  shape_end  .MoveTo   ( -1,  -1);
  shape_end  .Line     (  2,   0);
  shape_end  .Line     (  0,   2);
  shape_end  .Line     ( -2,   0);
  shape_end  .Line     (  0,  -2);

  MovieClip   box;
  box.Stop();

  DisplayItem iMorph = box.Add(morph);

  for (float n=0; n<=1; n+=1.0/25.0) {
    iMorph.Ratio(n);
    box.NextFrame();
  }

  MovieClip cell;
  DisplayItem iBox = cell.Add(box);
  iBox.Name("box");


  cell.Add(Action(
        "setTarget('box');"
        "dx = (/mouse.x + random(120)-60 - ...x)/20;"
        "dy = (/mouse.y + random(120)-60 - ...y)/20;"
        "gotoFrame(int(dx*dx + dy*dy));"
        ));

  cell.NextFrame();
  cell.Add(Action("gotoFrame(0);play();"));
  cell.NextFrame();

  for (int x=20; x<320;x+=40) {
  for (int y=20; y<240;y+=40) {
    DisplayItem iCell = movie.Add(cell);
    iCell.MoveTo(x, y);
  }} 

  movie.NextFrame();
  movie.Add(Action("gotoFrame(1);play();"));
  
  return 0;
}
This is one of a series of examples that demonstrates the C++ ming wrapper classes. Other examples can be found here.