haXe

haXe 每天一篇教程计划 [原创]

考虑很久,决定从今天开始,每天用一个小例子逐步讲解haXe语言的功能。

先广告一下:haXe China QQ群,新群,人不多,要加的快啊,群号:7345789。

一、基本介绍

  1. 永远的Hello World

二、haXe Flash开发

  1. 开始了解haXe

2009 年十月09日,星期五

每天一篇haXe (2) [原创]

——开始了解haXe

每天一篇haXe系列教程目录

上一节的Hello World只是一个简单的演示,从这一节开始,我们开始真正的了解、学习并开始使用haXe。

haXe是一种用来开发web应用的语言,从上一节中,我们知道它可以生成Flash的swf应用程序、Javascript程序代码、php程序代码、Neko程序字节码以及C++源代码等等,但haXe最重要的应用还是开发Flash应用程序,我们首先要讲的,也是开发Flash应用程序。

haXe目前可以做到Flash平台上除AIR开发外几乎所有的事情(原来曾经有一个haXe的扩展,是用来生成AIR的,但由于较少更新,这个扩展现在已经失效了),包括swc组件的开发,在这一节中,我们了解一下haXe在Flash开发中的神奇用途。

我们仍然在FlashDevelop中新建一个项目,项目名称为intro。打开它的主文件后,我们把大约在第5行开始的那段注释修改一下,这样我们就可以在将来很清晰地了解这一段代码是做什么用的。

/**
 * haXe 基本功能介绍,主文件
 * @author Icebird
 */

FlashDevelop自动生成的程序中,static function main()这一行声明了程序的主函数,所谓主函数,就是程序开始执行时第一个要执行的函数功能。我们可以在这个函数中声明一个主类的实例,以启动haXe的全部功能。

注:由于面向对象编程的规则和编译器的限制,我们无法在静态的主函数中调用Main类中声明的任何方法和属性,因此我们只能通过实例化主类的方法获得Main类的完整执行。

修改后,main函数变成了下面的样子:

	static function main() 
	{
		new Main();
	}

接下来,我们声明Main类的构造函数。如果你比较熟悉AS 3,那么这里就要注意了,AS3中的构造函数是声明一个与类相同名字的函数,但haXe中的构造函数却统一为new函数。如果你不了解面向对象编程,不了解AS 3,那么你可能会不明白这些都是什么,没有关系,可以先只是照着做,不用管它。后面的章节中我们会陆续详细讲解,这一步的代码如下:

function new()
	{
		
	}

接下来就是本节的重点了,先罗列出这一节中Main类的完整代码:

package ;

import flash.display.Sprite;
import flash.events.TimerEvent;
import flash.filters.BlurFilter;
import flash.Lib;
import flash.utils.Timer;

/**
 * haXe 基本功能介绍,主文件
 * @author Icebird
 */

class Main 
{
	var intType:Int;
	var floatType:Float;
	var stringType:String;
	var boolType:Bool;
	var enumType:UserDef;
	var dynamicType:Dynamic;
	
	var circle:Sprite;
	var timer:Timer;
	
	static function main() 
	{
		new Main();
	}
	
	function new()
	{
		intType = 5;
		trace("我是intType,我的类型整形类型,我现在的值是 " + intType + ",我加上5后的值是 " + (intType + 5));
		floatType = 5.5;
		trace("我是floatType,我的类型浮点类型,我现在的值是 " + floatType + ",我加上5后的值是 " + (floatType + 5));
		stringType = "8.5万";
		trace("我是stringType,我的类型字符串类型,我现在的值是 " + stringType + ",我加上5后的值是 " + (stringType + 5));
		boolType = true;
		trace("我是boolType,我的类型布尔类型,我现在的值是 " + boolType + ",我不能加上5,但我还可以是 " + !boolType);
		enumType = This;
		trace("我是enumType,我的类型枚举类型,我现在的值是 " + enumType + ",我也不能加上5,但我的取值范围是用户规定的");
		dynamicType = 1;
		trace("我是dynamicType,我的类型动态类型,我现在的值是 " + dynamicType + ",我可以是任何值,例如:");
		dynamicType = "test";
		trace("dynamicType现在的类型是" + Type.typeof(dynamicType) + ",我现在的值是 " + dynamicType);
		dynamicType = 9.56;
		trace("dynamicType现在的类型是" + Type.typeof(dynamicType) + ",我现在的值是 " + dynamicType);
		
		circle = new Sprite();
		circle.graphics.beginFill(0xFF0000);
		circle.graphics.drawCircle(0, 0, 20);
		circle.y = 360;
		circle.x = -20;
		circle.filters = [new BlurFilter(8, 0)];
		Lib.current.addChild(circle);
		timer = new Timer(33);
		timer.addEventListener(TimerEvent.TIMER, moveCircle);
		timer.start();
	}
	
	private function moveCircle(e:TimerEvent):Void 
	{
		circle.x += 5;
		if (circle.x >= circle.stage.stageWidth + 20)
		{
			circle.x = -20;
		}
	}
	
}

enum UserDef {
	This;
	That;
}

如果你比较了解AS 3,那么相信上面的代码你已经看懂了大半了吧?

OK,下面我们来逐一讲解这些代码。

第一行的package;声明了这个程序文件所在的包,包的概念会在以后章节详细说明。

接下来从第三行到第七行导入了flash开发的5个类,分别是用于包含显示对象的Sprite类、计时器事件TimerEvent类、模糊滤镜BlurFilter类、haXe特有的Lib类和计时器Timer类,这些类的详细用法请在互联网上找到Actionscript 3的语言手册查阅。

第十四行声明了这个项目的主类Main类,16行开始,我们声明了若干变量,为了说明haXe的类型,我们声明了6个类型变量,接下来又声明了一个显示对象变量和一个计时器变量。

我们先来看一下今天要讲解的第一部分——haxe的基本类型。

  1. 空类型 Void。由于空类型只是用于函数的返回值类型定义,因此我们并没有声明空类型的变量。函数返回值的概念在以后章节中讲解函数时会讲到。
  2. 整型 Int。整型就是,描述一个整数,可以是负整数。不可以把带有小数的浮点类型的数值赋给一个整型的变量(PS:如果你对面向对象有所了解,那么这里可以提前告知你一下,haXe里的整型类型是继承自浮点型)。
  3. 浮点型 Float。浮点型描述一个数学概念中的实数,有人曾经认为浮点型就是小数,但事实上0和一个不含有任何小数的整数数值(包括负数)也可以是浮点数。因此浮点数的概念范围应该是数学概念中的实数。
  4. 字符串类型 String类。haXe中并没有把字符串类型做为一个基本类型,之所以在这里提到字符串类型,是因为它太常用了。字符串类型用于存储和描述任何你的计算机中所能够显示的文字所组成的一个序列。而某些计算机语言的定义中认为字符串其实就是一串整形数值(最典型的是erlang语言,C++中也类似,与erlang不同的只是把一个整数类型的变种字符类型作为了字符串类型的基础,python中情形相似)
  5. 枚举类型。枚举在AS 3中并不存在,但如果接触和使用过C和C++的程序员对枚举都不陌生,枚举允许程序员自己定义一些特殊类型,并列举出该类型的变量所允许的所有取值。在本例中,列举了两个取值This和That,定义方法请见程序尾部的73行,用法见41行。
  6. 动态类型 Dynamic。动态类型可以是当前程序中能够使用的任意值。

现在,你可以把上面列表中的代码复制粘贴替换掉你FlashDevelop中的全部代码,保存编译运行看看效果了。

你能看到,我们输出的所有文字都正确显示了。同时还有一个小球在从左到右不停地循环移动,那个小球,就是我们今天要讲的第二部分内容了。

在程序的第50行,我们把要画小球的circle生成一个实例,注意circle的类型并不是上面所说的任意一种,而是Sprite,这是因为包括haXe在内,所有的面向对象语言,其类型都可以是任意类,Sprite是Flash的内置类,haXe同样也提供了这个类的接口。我们可以直接使用它。

从第51行开始,我们先是通知程序,准备好红色颜料,接着在52行告知程序在Flash场景的坐标原点绘制了一个半径为20像素的圆球,这个圆球可以理解为从属于circle变量。然后,在53、54行我们把circle移动到了360,-20这个坐标,由于Y轴坐标-20是在场景外部,这样小球的起始点就在屏幕外边了。最后,为了使小球移动的时候看起来不那么生硬,在55行我们给小球加上了一个横向的模糊滤镜。最后,在56行,我们把小球添加到了场景的显示树中,使我们可以看到小球。如果没有这一行的话,我们永远无法看到这个小球。

第57行则是生成了一个计时器对象,我们把这个计时器对象的计时周期设定为33毫秒,这样大约30次计时为一秒。接着,我们为这个计时器添加了一个侦听函数,目的是在计时器的每个计时周期都执行一遍moveCircle函数。那么,我们在moveCircle函数中又做了什么?接着看:

很简单,直接把circle的x坐标增加了5,也就是把circle向右移动了5像素,然后,判断一下circle是否已经移动到了场景右侧以外,反应到数值上,就是判断circle的x坐标值是否已经达到或者超过了场景宽度与circle半径的和。如果判断的条件成立的话,意味着我们的小球已经从右边移出了场景,我们把它拿回到左边场景外,让它继续移动。

现在,留给你一个需要你自己考虑的问题了,如果我希望小球移出右侧场景后,再原路向左移动回来,这样往返做一个“乒乓”式的运动,聪明的你,是否已经想到该怎么做了呢?

2009 年十月10日,星期六

每天一篇haXe (1) [原创]

——永远的Hello World

不知道从什么时候起,在一个语言的入门书中,Hello World成了必备的第一课……

每天一篇haXe系列教程目录

不知道从什么时候起,在一个语言的入门书中,Hello World成了必备的第一课。既然我们无意改变这个传统,那么haXe的第一课就从Hello World开始吧。

在开始向这个World say Hello之前,我们还要废话一些,就是要先装软件,以下软件必装:

  1. haXe ,下载地址: http://haxe.org/download?lang=cn ,下载页面是中文的,windows版下载完毕后直接运行,需要连着互联网,安装程序会自动下载和安装适用的haXe和neko版本。
  2. dotNetFramework,其实这玩意在我们的开发中一点用都没有,但由于后面要装的FlashDevelop必须要安装微软的这个dotNet运行环境,装就装吧,下载地址。直接安装即可。
  3. FlashDevelop。猛击这里下载。是一个论坛,没有中文哦,不过挑版本号最高的下准没错。下载完后运行会要求你装Java,这个是用flex SDK编译AS 3和MXML文件才用得上的,我们是用haXe,没什么大用,无视它,继续一路Next到底。OK,重启一遍电脑就好了。
  4. Flash Player。下载地址,注意一定要选择那个Download the Windows Flash Player 10 Projector content debugger (EXE, 5.18 MB),就是要下载独立调试版本,如果有比10更新的版本就下载最新的独立调试播放器。全部装完后重启一遍电脑就好了。

废话完毕,Hello World之trace篇。

先启动Flash Develop(还是废话),全是英文的,虽然有汉化版,但谁也不知道汉化后会不会有问题,况且较高的开发资料大多是英文,为了您的前途和钱途着想,建议您还是学学这点英文吧。

关掉那个讨厌的Start Page,我们点菜单中的Project-New Project… ,把滚动条拖到最下面,就能找到haXe的项目模板,天啊,有AS 3、AS 2、JS、Neko、PHP、还有C++……,这也太夸张了吧?先别激动,听我说,as 2和as 3的项目可以直接编译swf文件,而Neko则是编译成Neko字节码,至于JS和PHP,则分别是可以把你的haXe程序编译成JS和PHP的源代码,最鸡肋的算是C++了,不过是生成了一堆C++源码而已,而且用它开发的程序执行效率并不高,而且编译出来的桌面程序还会有一个讨厌的命令行窗口,其实,它是为开发iPhone的应用准备的,虽然将来可能会好,但至少到我写这篇教程为止,它在windows桌面系统上还是没什么太大的用处。

不知不觉又是一堆废话,好了,再不说了,直接选择AS 3 Project,在下面选择好要放你的源码的目录(注意一定要是空目录,不然文件会十分乱,除非你确定一定要把该目录中的内容包含在项目里),写好项目名称,最下面的Package一项留空即可,全部选好后点OK,项目就创建完毕了。

这是在右侧找到Project面板,展开src文件夹,双击Main.hx文件打开编辑,把它的内容修改如下(这里有可能会弹出一个对话框让你输入代码编辑人员的名字,输入即可):

package ;

import flash.Lib;

/**
 * ...
 * @author Icebird
 */

class Main 
{
	
	static function main() 
	{
		trace("Hello haXe World !");
	}
	
}

上面的代码中其实只是增加了一行trace("Hello haXe World !");,其他的代码都是Flash Develop自动生成的。

然后点上方工具栏中的Test Movie按钮,就能看到效果了。如果软件安装正确并且输入无误,你应该可以看到打开了一个Flash播放器,其中会有一行文字中输出类似Main.hx:15 Hello haXe World ! 这样的字样,看到这个,就说明你已经成功了。

详细讨论请加haXe China QQ群讨论。群号:7345789。

2009 年十月09日,星期五

第 1 页,共 3 页  1 2 3 >

聚合

联系我

发消息给我(内容保密)

QQ:290795401

Email:icebirds@163.com

京ICP备06049116号