forked from: ワンダフルクエスト with Google Maps API

by vasari forked from ワンダフルクエスト with Google Maps API (diff: 1)
♥0 | Line 182 | Modified 2010-01-20 10:42:48 | MIT License
play

ActionScript3 source code

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

<?xml version="1.0" encoding="utf-8"?>
<!-- forked from osamX's ワンダフルクエスト with Google Maps API -->
<!--
 Copyright 2008 Google Inc.
 Licensed under the Apache License, Version 2.0:
    http://www.apache.org/licenses/LICENSE-2.0
-->
<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);
			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>