1

actionscript 的新手并查看 GeolocationEvent.UPDATE 示例,使用 .appendText() 和 array.push 有一些意想不到的结果——我不知道它们是否都只是手机跟不上更新?

首先,文本问题是它覆盖而不是替换上次写入,因此在手机上运行应用程序几分钟后,您无法再读取数字。--使用 this.removeChild() 然后 addChild() 是关于试图让它在再次写入之前删除最后一次写入。

其次,数组的问题在于它在 trace() 中输出随机 .length 数字——长度看起来偶尔会重置为 2 ,然后再次计数,并且计数到看似随机的数字。我知道我不希望最终版本中的数组开销,但我正在尝试从它为什么不起作用中学习。

我已经注释掉了我尝试过的不同的东西——对不起,如果我在这里错过了一些基本的东西

var format:TextFormat = new TextFormat();
    format.color = 0xff0066;
    format.font = "Lucida Console";
    format.size = 20;
var fl_GeolocationDisplay:TextField = new TextField();
    fl_GeolocationDisplay.defaultTextFormat = format;   
    fl_GeolocationDisplay.x = 10; 
    fl_GeolocationDisplay.y = 20;
    fl_GeolocationDisplay.selectable = false;   
    fl_GeolocationDisplay.autoSize = TextFieldAutoSize.LEFT;
//fl_GeolocationDisplay.text = "Geolocation is not responding. Verify the device's     location settings.";
fl_GeolocationDisplay.text = " ";
addChild(fl_GeolocationDisplay);

var gpsArray:Array = [42.09646417];

if(!Geolocation.isSupported)
{
    fl_GeolocationDisplay.text = "Geolocation is not supported on this device.";
}
else
{
    var fl_Geolocation:Geolocation = new Geolocation();
    fl_Geolocation.setRequestedUpdateInterval(60000); //android overrides     setRequestedUpdateInterval()
    fl_Geolocation.addEventListener(GeolocationEvent.UPDATE, fl_UpdateGeolocation);
    fl_Geolocation.addEventListener(StatusEvent.STATUS, gpsStatusHandler);
}

function fl_UpdateGeolocation(event:GeolocationEvent):void
{
    //gpsArray.push(event.latitude);
    //gpsArray[gpsArray.length] = event.latitude;
    gpsArray.unshift(event.latitude);
    var speed:Number = event.speed * 2.23693629; 
    if (gpsArray[gpsArray.length - 2] != gpsArray[gpsArray.length - 1]) 
    {       
        trace(gpsArray.length + "|" + gpsArray[gpsArray.length - 2] + "|" +     gpsArray[gpsArray.length - 1]);
        trace(gpsArray[1] + "|" + gpsArray[0]);
        trace(gpsArray[gpsArray.length - 2] - gpsArray[gpsArray.length - 1]);
    }

    //this.removeChild(fl_GeolocationDisplay);
    fl_GeolocationDisplay.parent.removeChild(fl_GeolocationDisplay);
    //fl_GeolocationDisplay = null; //TypeError: Error #2007: Parameter child must be non-null.
    addChild(fl_GeolocationDisplay);
    fl_GeolocationDisplay.text = (event.latitude.toString() + " | " +     event.timestamp.toString());
    //fl_GeolocationDisplay.text = (event.latitude.toString() + "\n");
    //fl_GeolocationDisplay.appendText(event.latitude.toString() + "\n");
    //fl_GeolocationDisplay.appendText(event.longitude.toString() + "\n");
}

function gpsStatusHandler(event:StatusEvent):void {
    if (fl_Geolocation.muted) {
        fl_GeolocationDisplay.text = "Please verify the device's location     settings.";
    }
}
4

1 回答 1

0

我真的无法理解您要做什么,我的意思是您说的是一件事,但您的代码似乎说了一些不同的东西。

还有一个严重的问题是不同代码片段的位置?似乎顶部在构造函数内部。然后底部是他们自己的功能?如果是这种情况,请确保构造函数没有运行多次(这似乎是问题并解释了为什么项目被“覆盖”在彼此之上。

您的问题还说明了有关 appendText 的一些信息,但您似乎想替换文本字段内的文本?AppendText 将在该文本字段内添加额外的文本。

无论如何,我从你的代码中做了一个实现,它从更新事件中获取“经度|纬度”,然后将它们附加到新行的文本字段中。也许这就是你想做的?我注释掉了 gps-array 因为我不知道你试图通过这样做来实现什么:

package {
    import flash.events.GeolocationEvent;
    import flash.events.StatusEvent;
    import flash.sensors.Geolocation;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;


    public class Foobar extends MovieClip {
        var gpsArray:Array = [42.09646417];
        var format:TextFormat = new TextFormat();
        var fl_GeolocationDisplay:TextField = new TextField();
        var fl_Geolocation:Geolocation = new Geolocation();

        public function Foobar() {
            format.color = 0xff0066;
            format.font = "Lucida Console";
            format.size = 20;
            fl_GeolocationDisplay.defaultTextFormat = format;
            fl_GeolocationDisplay.x = 10;
            fl_GeolocationDisplay.y = 20;
            fl_GeolocationDisplay.selectable = false;
            fl_GeolocationDisplay.autoSize = TextFieldAutoSize.LEFT;
            //fl_GeolocationDisplay.text = "Geolocation is not responding. Verify the device's     location settings.";
            fl_GeolocationDisplay.text = " ";
            addChild(fl_GeolocationDisplay);


            if(!Geolocation.isSupported) {
                trace("unsupported");
                fl_GeolocationDisplay.text = "Geolocation is not supported on this device.";
            } else {
                trace("supported");
                fl_Geolocation.setRequestedUpdateInterval(500); //android overrides     setRequestedUpdateInterval()
                fl_Geolocation.addEventListener(GeolocationEvent.UPDATE, fl_UpdateGeolocation);
                fl_Geolocation.addEventListener(StatusEvent.STATUS, gpsStatusHandler);
            }
        }

        function fl_UpdateGeolocation(event:GeolocationEvent):void {
            /*gpsArray.unshift(event.latitude);
            var speed:Number = event.speed * 2.23693629;
            if (gpsArray[gpsArray.length - 2] != gpsArray[gpsArray.length - 1]) {
                trace(gpsArray.length + "|" + gpsArray[gpsArray.length - 2] + "|" +     gpsArray[gpsArray.length - 1]);
                trace(gpsArray[1] + "|" + gpsArray[0]);
                trace(gpsArray[gpsArray.length - 2] - gpsArray[gpsArray.length - 1]);
            }*/

            fl_GeolocationDisplay.appendText(event.latitude.toString() + "|" + event.longitude.toString() + "\n");
        }

        function gpsStatusHandler(event:StatusEvent):void {
            if (fl_Geolocation.muted) {
                fl_GeolocationDisplay.text = "Please verify the device's location     settings.";
            }
        }
    }

}
于 2013-03-31T13:39:01.607 回答