flash on 2011-3-15

by tepe
♥1 | Line 177 | Modified 2011-03-16 12:09:31 | MIT License
play

ActionScript3 source code

/**
 * Copyright tepe ( http://wonderfl.net/user/tepe )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/ky9H
 */

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<maps:Map xmlns:maps="com.google.maps.*" id="map" mapevent_mapready="WonderflQuest(event)"
  width="100%" height="100%" />
<mx:Script>
    <![CDATA[

    import flash.display.*;
    import flash.events.*;
    import flash.geom.Point;
    import flash.net.URLRequest;
    import flash.system.*;
    
    import com.google.maps.Map;
    import com.google.maps.LatLng;
    import com.google.maps.styles.StrokeStyle;
    import com.google.maps.MapEvent;
    import com.google.maps.overlays.Marker;
    import com.google.maps.overlays.MarkerOptions;
    import com.google.maps.wrappers.EventDispatcherWrapper;

    import mx.core.UIComponent;

    private const SIZE:Number = 465;
    private const SCALE:Number = 3;
    private const SPEED:Number = 0.000008;
    private const MAPSIZE:uint = 16;
    private const FLDSIZE:uint = 48;
    
    private var yuusha:Sprite;
    private var yuushaPos:Point;
    private var frameCount:Number = 0;
    private var keyFlags:Array = [false, false, false, false];
    private var treasureBmd:BitmapData;
    private var mode:int = 0;
    private var container:UIComponent;
        
    public function WonderflQuest(e:Event = null):void 
    {
        //create yuusha
        container= new UIComponent();
        addChild(container); 
        yuusha = new Sprite();
        createYuusha();
        changeDirection(0);
        container.scaleX = container.scaleY = SCALE;
        container.x = container.y = (SIZE - FLDSIZE) / 2;
        container.addChild(yuusha);
        yuushaPos = new Point(135.525855, 34.687353);
        
        //load image for marker
        Security.loadPolicyFile("http://flash-scope.com/wonderfl/crossdomain.xml");
        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
            treasureBmd= new BitmapData(16, 16);
            treasureBmd.draw(loader);
            mode = 1;
        });
        loader.load(new URLRequest("http://flash-scope.com/wonderfl/WonderflQuest/map/treasure.png"), new LoaderContext(true));
        
        this.map.setCenter(new LatLng(yuushaPos.y, yuushaPos.x), 19);
        
        stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
        stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
        addEventListener(Event.ENTER_FRAME, onEnterFrame);
    }
    
    
    private function createMarker(xx:Number, yy:Number):void {
        var bmp:Bitmap = new Bitmap(treasureBmd);
        bmp.scaleX = bmp.scaleY = 3;
        var marker:Marker = new Marker( new LatLng(xx, yy),
            new MarkerOptions({
            iconAlignment: MarkerOptions.ALIGN_BOTTOM | MarkerOptions.ALIGN_HORIZONTAL_CENTER
            ,icon: bmp
        }));
        this.map.addOverlay(marker);
    }
    
    //フレーム
    private function onEnterFrame(event:Event):void {
        
        //宝箱描画
        if (mode == 1) { //image loaded
            createMarker(34.687022136844746, 135.5257612466812);
            createMarker(34.68799917110571, 135.5254527926445);
            createMarker(34.68839910110471, 135.5254527926445);
            mode = 2;
        }
        
        if (frameCount++ > 10) {
            frameCount = 0;
            walk();
        }
        //移動
        switch(true) {
            case keyFlags[0]:
                yuushaPos.y -= SPEED;
                changeDirection(0);
                moveMap();
                break;
            case keyFlags[1]:            
                yuushaPos.y += SPEED;
                changeDirection(1);
                moveMap();
                break;
            case keyFlags[2]:
                yuushaPos.x -= SPEED;
                changeDirection(2);
                moveMap();
                break;
            case keyFlags[3]:
                yuushaPos.x += SPEED;
                changeDirection(3);
                moveMap();
                break;
        }
    }
    
    //キー入力
    private function onKeyDown(event:KeyboardEvent):void {
        switch(event.keyCode) {
            case 40: case 83:
                keyFlags[0] = true;
        }
        switch(event.keyCode) {
            case 38: case 87:
                keyFlags[1] = true;
        }
        switch(event.keyCode) {
            case 37: case 65:
                keyFlags[2] = true;
        }
        switch(event.keyCode) {
            case 39: case 68:
                keyFlags[3] = true;
        }
    }
    
    //キー解除
    private function onKeyUp(event:KeyboardEvent):void {
        switch(event.keyCode) {
            case 40: case 83:
                keyFlags[0] = false;
        }
        switch(event.keyCode) {
            case 38: case 87:
                keyFlags[1] = false;
        }
        switch(event.keyCode) {
            case 37: case 65:
                keyFlags[2] = false;
        }
        switch(event.keyCode) {
            case 39: case 68:
                keyFlags[3] = false;
        }
    }
    private function moveMap():void {
        this.map.setCenter(new LatLng(yuushaPos.y, yuushaPos.x));
    }

    public var direction:int = 0;
    private var walkFlag:Boolean = true;
    private var yuushaImages:Array = [];
    
    public function createYuusha():void {
        for (var i:uint = 0; i < 8; i++) {
            var loader:Loader = new Loader();
            loader.load(new URLRequest(ImageURL[i]), new LoaderContext(true));
            yuushaImages.push(loader);
            if(i) yuushaImages[i].visible = false;
            container.addChild(yuushaImages[i]);
        }
    }
    
    //キャライメージ
    private const ImageURL:Array = [
        "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaF1.png",
        "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaF2.png",
        "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaB1.png",
        "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaB2.png",
        "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaL1.png",
        "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaL2.png",
        "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaR1.png",
        "http://flash-scope.com/wonderfl/WonderflQuest/yuusha/yuushaR2.png"
    ];
    
    //キャライメージ切り替え
    public function walk():void {
        walkFlag = !walkFlag;
        for (var i:uint = 0; i < 8; i++) {
            if (i == 2*direction+int(walkFlag)) yuushaImages[i].visible = true;
            else yuushaImages[i].visible = false;
        }
    }
    
    public function changeDirection(num:int):void {
        direction = num;
        for (var i:uint = 0; i < 8; i++) {
            if (i == 2*direction+int(walkFlag)) yuushaImages[i].visible = true;
            else yuushaImages[i].visible = false;
        }
    }
    
    ]]>
</mx:Script>
</mx:Application>