Analog Clock Tutorial for haXe

From GMpedia.org Wiki

Jump to: navigation, search

Contents

[edit] Pepe's example analog clock

I found a fine tutorial to bild an analog clock, see the external link, and tryed to use Haxe to get the SWF-file. I explain here what I have done ... .

[edit] Helpfile for compilation

I do compilation in a Cygwin-command-window on a W2000 PC.

Suppose Haxe is living at / ... /Haxe/ .

/.../Haxe/   Installation Directory
/.../Haxe/clock/compile.hxml
/.../Haxe/clock/src/clock.hx
/.../Haxe/clock/bin   Result directory of compilation will contain clock.swf after errorfree compilation.

Go in a Cygwin-command-window to

/.../Haxe/clock/ and execute  
prompt> ../haxe compile.hxml

Content of compile.hxml:

-cp src/
-swf bin/clock.swf
-main Clock.hx

If you use a normal DOS-box for compilation, replace / by \.

[edit] Source of the clock

This is my source to build a running analog clock
Pay attention: Date.hx (von Haxe) has been adjusted, see below!

import flash.MovieClip;
class Clock
{
      private var clock : MovieClip;
      private var circle : MovieClip;

      public function new ()
      {
        clock = flash.Lib._root.createEmptyMovieClip ("clock", 3);
        clock._x = 150;
        clock._y = 150;
        circle = clock.createEmptyMovieClip ("circle", 1);
	var circleRadius = 100.0;

	var a = 0.0;
	var radAngle = 0.0;
	circle.lineStyle (3, 0x0000FF, 100);
	circle.moveTo(100,0);
	var xCoord = 0;
	var yCoord = 0;

//for (a=0; a<361; a++) not possible in Haxe

	while( a < 361.0){
	   radAngle = a*Math.PI/180;
	   xCoord = Math.floor(Math.cos(radAngle)*circleRadius);
	   yCoord = Math.floor(Math.sin(radAngle)*circleRadius);
	   circle.lineTo(xCoord, yCoord);
	   a = a +1.0;
	}

	clock.circle.lineStyle(3, 0x000000, 100);
	clock.circle.moveTo(100, 0);
	var circleRadius = 100;
	var smallerCircleRadius = 90;
	var h = 0;
	var xCoord1 = 0.0;
	var yCoord1 = 0.0;
	var hourAngle = 0.0;
	var radHourAngle = 0.0;
//for (h=0; h<12; h++) {
	while( h< 12 ){
	   hourAngle = h*30;
           radHourAngle = hourAngle*Math.PI/180;
   	   xCoord1 = Math.cos(radHourAngle)*circleRadius;
   	   yCoord1 = Math.sin(radHourAngle)*circleRadius;
   	//local variable is ok too
	   var xCoord2 = Math.cos(radHourAngle)*smallerCircleRadius;
   	   var yCoord2 = Math.sin(radHourAngle)*smallerCircleRadius;
   	   clock.circle.moveTo(xCoord1, yCoord1);
   	   clock.circle.lineTo(xCoord2, yCoord2);
   	   h++;
	}

	clock.circle.lineStyle(1, 0x000000, 100);
	clock.circle.moveTo(100, 0);
	circleRadius = 99;
	smallerCircleRadius = 91;
	var minuteAngle = 0;
	var radMinuteAngle = 0.0;
//for (m=0; m<60; m++) { //not possible
	var m = 0;
	while( m < 60 ){
   	   minuteAngle = m*6;
	   radMinuteAngle = minuteAngle*Math.PI/180;
	   xCoord1 = Math.cos(radMinuteAngle)*circleRadius;
	   var yCoord1 = Math.sin(radMinuteAngle)*circleRadius;
	   var xCoord2 = Math.cos(radMinuteAngle)*smallerCircleRadius;
	   var yCoord2 = Math.sin(radMinuteAngle)*smallerCircleRadius;
	   clock.circle.moveTo(xCoord1, yCoord1);
	   clock.circle.lineTo(xCoord2, yCoord2);
	   m++;
}

//Haxe Date.hx has to be adjusted !!!!!
	clock.createEmptyMovieClip("hoursHand", 20);
	clock.hoursHand.lineStyle(6, 0x000000, 100);
	clock.hoursHand.moveTo(0, 0);
	clock.hoursHand.lineTo(0, -50);

	var minutesHand = clock.createEmptyMovieClip("minutesHand", 30);
	clock.minutesHand.lineStyle(5, 0x000000, 100);
	clock.minutesHand.moveTo(0, 0);
	clock.minutesHand.lineTo(0, -81);

	var seondsHand = clock.createEmptyMovieClip("secondsHand", 40);
	clock.secondsHand.lineStyle(0, 0xFF0000, 100);
	clock.secondsHand.moveTo(0, 0);
	clock.secondsHand.lineTo(0, -90);

// This makes the clock running!
	clock.onEnterFrame = mainLoop;
      }

      private function mainLoop () : Void
      {
                  var clockDate = Date.now();
                  var seconds = clockDate.getSeconds();
                  clock.secondsHand._rotation = seconds * 6;
                  var minutes = clockDate.getMinutes();
                  clock.minutesHand._rotation = minutes * 6;
                  var hours = clockDate.getHours();
                  clock.hoursHand._rotation = (hours * 30) + (minutes/2);

      }

      public static function main ()
      {
                        new Clock ();
      }
}


[edit] HTML file

<html>
<head><title>Analog clock</title></head>
<body bgcolor="#dddddd">


<center>
<h1>Haxe build analog clock</h1>
<object	classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
        width="300"
	height="300"
	id="haxe"
	align="middle">
<param name="movie" value="clock.swf"/>
<param name="allowScriptAccess" value="sameDomain" />
<param name="quality" value="high" />
<param name="scale" value="noscale" />
<param name="salign" value="lt" />
<param name="bgcolor" value="#f0f0f0"/>
<embed src="clock.swf"
       bgcolor="#ff00ff"
       width="300"
       height="300"
       name="haxe"
       quality="high"
       align="middle"
       allowScriptAccess="sameDomain"
       type="application/x-shockwave-flash"
       pluginspage="http://www.macromedia.com/go/getflashplayer"
/>
</object>
</center>
</body>
</html>

[edit] Adjustments for Date.hx

Add to Date.hx

	function getSeconds(): Int;
	function getMinutes(): Int;
	function getHours(): Int;

[edit] External Links

Pepe.

Personal tools