Haxe and Flash Basic
2014-12-11 18:48
260 查看
copy from :http://blog.neurotoxic.org/post/2009/01/13/first
In this tutorial, we will learn the basics of Haxe/Flash.
Content:
- An Hello World
- A simple rectangle
- Move our rectangle
- User input
- Use an image in our application
- Use multiple images to create an animation
Haxe seems to be the perfect language if you want to add Flash application to your web site. With the current version, you can create Haxe/Flash SWF using all the ActionScript3/Flash9 API, combined with the powerful Haxe API.
As I'm still a beginner using Haxe, I may do things not using the simplest way. I will be very happy to receive suggestions.
The file Tutorial.hx (from Haxe.org):
[/code]
The line -swf-header 320:240:30 means we want a 320 * 240 flash application, with 30 images/second.
Compile using the command:
You obtain a file tutorial.swf, wich you can open with firefox:
You can look to the methods we can use on a Shape in the API. Note that most of the methods come from the parent class DisplayObject.
Result after compilation:
You can try to play with coordinates, the colour. Try too to use the other class in graphics, like lineTo, drawCircle...
We have to define a listener on the event
Result:
We simply have to define listeners on KeyboardEvent.KEY_DOWN and KeyboardEvent.KEY_UP, to be aware when a key is pressed/released.
Result:
Note that you first have to click on the Flash to give it focus and allow it to catch input events.
To do it, I first have to create another .swf that will contain all the external resources of my application.
The application swfmill is used.
First we create a file resource.xml that will indicate to swfmill the resources we want to include, and the names to identify this resources:
Create the file resource.swf using the command swfmill simple resource.xml resource.swf.
Modify the compile.hxml file to indicate the compiler to use resource.swf:
We can now write Tutorial.hx:
Result:
We only have to modify our resource file resource.xml, to create a clip composed of 4 frames, each one using one image:
As the id "men" of the clip is still the same, we do not need to do a modification in our Tutorial.hx file, we only need to compile.
The result:
In this tutorial, we will learn the basics of Haxe/Flash.
Content:
- An Hello World
- A simple rectangle
- Move our rectangle
- User input
- Use an image in our application
- Use multiple images to create an animation
Haxe seems to be the perfect language if you want to add Flash application to your web site. With the current version, you can create Haxe/Flash SWF using all the ActionScript3/Flash9 API, combined with the powerful Haxe API.
As I'm still a beginner using Haxe, I may do things not using the simplest way. I will be very happy to receive suggestions.
Hello World:
We begin by creating a simple project, with a simple text displayed.The file Tutorial.hx (from Haxe.org):
class Tutorial { static function main() { // creates a TextField var tf = new flash.text.TextField(); tf.text = "Hello World !"; // add it to the display list flash.Lib.current.addChild(tf); } }The file compile.hxml:
-main Tutorial -swf-version 9 -swf-header 320:240:30 -swf tutorial.swf
[/code]
The line -swf-header 320:240:30 means we want a 320 * 240 flash application, with 30 images/second.
Compile using the command:
haxe compile.hxml
You obtain a file tutorial.swf, wich you can open with firefox:
A simple rectangle:
We want now to create a coloured rectangle:static function main() { var myRectangle : flash.display.Shape = new flash.display.Shape(); myRectangle.graphics.beginFill ( 0x990000 ); // the color of the rectangle myRectangle.graphics.lineStyle ( 1, 0x000000, 1, false, flash.display.LineScaleMode.NONE ); // the border style
// we add the rectangle at the high-left corner (coordinate 0,0 )of the screen, with a width and a length of 10.
myRectangle.graphics.drawRect ( 0, 0, 50, 50); // or myRectangle.graphics.endFill (); flash.Lib.current.addChild(myRectangle); }
You can look to the methods we can use on a Shape in the API. Note that most of the methods come from the parent class DisplayObject.
Result after compilation:
You can try to play with coordinates, the colour. Try too to use the other class in graphics, like lineTo, drawCircle...
Moving our Shape:
At each new frame generated, we want to move our rectangle.We have to define a listener on the event
ENTER_FRAMEto automaticaly call our method
onEnterFrame():
class Tutorial { static var myRectangle : flash.display.Shape; static var rectangleWidth = 50; static var rectangleHeight = 50; static function main() { myRectangle = new flash.display.Shape(); myRectangle.graphics.beginFill ( 0x990000 ); myRectangle.graphics.lineStyle ( 1, 0x000000, 1, false, flash.display.LineScaleMode.NONE ); myRectangle.graphics.drawRect ( 0, 0, rectangleWidth, rectangleHeight); myRectangle.graphics.endFill (); flash.Lib.current.addChild(myRectangle); flash.Lib.current.addEventListener(flash.events.Event.ENTER_FRAME,function(_) Tutorial.onEnterFrame()); } static function onEnterFrame() { myRectangle.x ++; myRectangle.y ++; if( myRectangle.x > flash.Lib.current.stage.stageWidth - rectangleWidth) myRectangle.x = 0; if( myRectangle.y > flash.Lib.current.stage.stageHeight - rectangleHeight) myRectangle.y = 0; } }
Result:
User Input:
What if we want now to move the shape using the arrow keys ?We simply have to define listeners on KeyboardEvent.KEY_DOWN and KeyboardEvent.KEY_UP, to be aware when a key is pressed/released.
class Tutorial { static var myRectangle : flash.display.Shape; static var rectangleWidth = 50; static var rectangleHeight = 50; static var moveX : Float = 0; // the movement per frame of the rectangle on the horizontal axis static var moveY : Float = 0; // the movement per frame of the rectangle on the vertical axis static function main() { myRectangle = new flash.display.Shape(); myRectangle.graphics.beginFill ( 0x990000 ); myRectangle.graphics.lineStyle ( 1, 0x000000, 1, false, flash.display.LineScaleMode.NONE ); myRectangle.graphics.drawRect ( 0, 0, rectangleWidth, rectangleHeight); myRectangle.graphics.endFill (); flash.Lib.current.addChild(myRectangle); flash.Lib.current.addEventListener(flash.events.Event.ENTER_FRAME,function(_) Tutorial.onEnterFrame()); flash.Lib.current.stage.addEventListener(flash.events.KeyboardEvent.KEY_DOWN, key_down); flash.Lib.current.stage.addEventListener(flash.events.KeyboardEvent.KEY_UP, key_up); } static function key_down(event:flash.events.KeyboardEvent) { if (event.keyCode == 37) // left arrow moveX = -1; else if (event.keyCode == 39) // right arrow moveX = 1; else if (event.keyCode == 38) // up arrow moveY = -1; else if (event.keyCode == 40) // down arrow moveY = 1; } static function key_up(event:flash.events.KeyboardEvent) { if (event.keyCode == 37 && moveX == -1) // left arrow moveX = 0; else if (event.keyCode == 39 && moveX == 1) // right arrow moveX = 0; else if (event.keyCode == 38 && moveY == -1) // up arrow moveY = 0; else if (event.keyCode == 40 && moveY == 1) // down arrow moveY = 0; } static function onEnterFrame() { myRectangle.x += moveX; myRectangle.y += moveY; // here we prevent the rectangle to move out of the display area if( myRectangle.x > flash.Lib.current.stage.stageWidth - rectangleWidth -1) myRectangle.x = flash.Lib.current.stage.stageWidth - rectangleWidth -1; else if( myRectangle.x < 0 ) myRectangle.x = 0; if( myRectangle.y > flash.Lib.current.stage.stageHeight - rectangleHeight -1) myRectangle.y = flash.Lib.current.stage.stageHeight - rectangleHeight -1; else if( myRectangle.y < 0 ) myRectangle.y = 0; } }
Result:
Note that you first have to click on the Flash to give it focus and allow it to catch input events.
External image:
I want to insert this image in my Flash application:To do it, I first have to create another .swf that will contain all the external resources of my application.
The application swfmill is used.
First we create a file resource.xml that will indicate to swfmill the resources we want to include, and the names to identify this resources:
<?xml version="1.0" ?> <movie version="9"> <frame> <library> <clip id="men" import="men.png"/> </library> </frame> </movie>
Create the file resource.swf using the command swfmill simple resource.xml resource.swf.
Modify the compile.hxml file to indicate the compiler to use resource.swf:
-main Tutorial -swf-version 9 -swf-header 320:240:30 -swf-lib resource.swf -swf tutorial.swf
We can now write Tutorial.hx:
class Tutorial { static function main() { var s:flash.display.MovieClip = flash.Lib.attach("men"); // "men" is the name defined in resource.xml flash.Lib.current.addChild(s); } }
Result:
Animating:
The objective is now to create an animation using the following images:We only have to modify our resource file resource.xml, to create a clip composed of 4 frames, each one using one image:
<?xml version="1.0" ?> <movie version="9"> <clip id="men1" import="men1.png"/> <clip id="men2" import="men2.png"/> <clip id="men3" import="men3.png"/> <frame> <library> <clip id="men"> <frame> <place id="men1" depth="1"/> </frame> <frame> <place id="men2" depth="1"/> </frame> <frame> <place id="men3" depth="1"/> </frame> <frame> <place id="men2" depth="1"/> </frame> </clip> </library> </frame> </movie>
As the id "men" of the clip is still the same, we do not need to do a modification in our Tutorial.hx file, we only need to compile.
The result:
相关文章推荐
- Openwrt学习笔记(二)——Flash Layout and file system
- Welcome to Flex 4.6 SDK and Flash Builder 4.6 Prerelease Pro
- [flash and php bible 学习笔记] 理解 flash 的 sandbox 安全机制
- Basic Data Structures and Algorithms in the Linux Kernel
- Basic Input and Output(Chapter 11 of Programming Ruby)
- [Android-Camera] If there is no flash setting option in Android stock camera apk, find the code and change it.
- flash and .net
- Haxe/flash comparison
- 使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法
- 修改Bootstrap源码支持不同大小nandflash
- Flash and beyond
- HTTP认证模式:Basic and Digest Access Authentication
- Difference between BasicHttpBinding and WsHttpBinding
- SQL Basics For HANA-Unit1:Motivation And Basic Concepts
- VideoIO Flash-based audio and video communication
- Algorithms and Data Structures: The Basic Toolbox
- Basic command and advice for memcached
- cookie and Flashcookie
- Basic and Digest Access Authentication (rfc2617) 及HttpClient实现
- Flash: An Efficient and Portable Web Server