工具
在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 编辑 ]