工具
在DirectX和Flex(Flash)中,我还是决定使用Flex(Flash)作为开发平台。
理由有以下几点:
1、DirectX效率固然高,但是对于三国这种对界面要求不多的游戏,不免大材小用。
2、使用DirectX,程序设计会变得非常庞大,非常麻烦。
3、Flex(Flash),尤其是Flex 3.0开发的程序,其运行效率已经很不错。
4、使用Flex,有一个先天优势在于画面开发极其方便(可以和最新的flash 9制作的swf交互),也就是说,我们可以使用Flash制作绚丽的游戏特效,然后将该swf文件嵌入到程序中。
5、actionscript 3是一种面向对象语言,虽然比不上java、c#,但是已经足够了。
6、Flex(Flash)可以嵌入在web页中。
7、Adobe的新产品AIR可以通过Stream的方式读取本地文件(这点尤为重要)。
开发的具体思想是:把游戏里需要使用的数据以xml的形式存放在本地磁盘上,然后使用AIR的API(File、FileStream等)将这些数据读入内存。
对于AIR
1、读取一个xml文件
private function loadData(fileName:String):Xml
{
var dataFile:File = File.applicationResourceDirectory.resolve(fileName);
var stream:FileStream = new FileStream();
stream.open(dataFile, FileMode.READ);
var xmlString = Xml(stream.readUTFBytes(stream.bytesAvailable));
stream.close();
return xmlString;
}
2、将一个xml文件保存到磁盘上
private function saveData(data:Xml):void
{
var dataFile:File = File.applicationResourceDirectory.resolve("data.xml");
var stream:FileStream = new FileStream();
stream.openAsync(dataFile, FileMode.WRITE);
stream.writeUTFBytes(data.toXmlString());
stream.close();
}
3、从一个Xml中解析出数据
actionscript中,处理xml非常简单:
package {
import flash.display.Sprite;
public class XmlExample extends Sprite {
public function XmlExample() {
var employees:XML =
<employees>
<employee ssn="123-123-1234">
<name first="John" last="Doe"/>
<address>
<street>11 Main St.</street>
<city>San Francisco</city>
<state>CA</state>
<zip>98765</zip>
</address>
</employee>
<employee ssn="789-789-7890">
<name first="Mary" last="Roe"/>
<address>
<street>99 Broad St.</street>
<city>Newton</city>
<state>MA</state>
<zip>01234</zip>
</address>
</employee>
</employees>;
trace(employees.employee[0].address.zip); // 98765
trace(employees.employee[1].@ssn); // 789-789-7890
trace(employees.employee.name); // <name first="John" last="Doe"/>
// <name first="Mary" last="Roe"/>
trace(employees..zip[0]); // 98765
trace(employees..@ssn[1]); // 789-789-7890
trace(employees..name); // <name first="John" last="Doe"/>
// <name first="Mary" last="Roe"/>
trace(employees.employee[0].address.*); // <street>11 Main St.</street>
// <city>San Francisco</city>
// <state>CA</state>
// <zip>98765</zip>
var node:String = "zip";
trace(employees.employee[0].address[node]); // 98765
var attribute:String = "ssn";
trace(employees.employee[1].@[attribute]); // 789-789-7890
for each (var num:XML in employees..@ssn) {
trace(num); // 123-123-1234
} // 789-789-7890
var ssnToFind:String = "789-789-7890";
trace(employees.employee.(@ssn == ssnToFind).toXMLString());
// <employee ssn="789-789-7890">
// <name first="Mary" last="Roe"/>
// <address>
// <street>99 Broad St.</street>
// <city>Newton</city>
// <state>MA</state>
// <zip>01234</zip>
// </address>
// </employee>
}
}
}
4…………
[ 本帖最后由 snowwaft 于 2007-8-22 10:09 编辑 ]