flash on 2011-3-15
♥1 |
Line 177 |
Modified 2011-03-16 12:09:31 |
MIT License
archived:2017-03-30 03:06:34
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>