外部画像ファイル(32bitPNG) を読み込んで表示する。
http://f.hatena.ne.jp/itouhiro/20130624222235 の画像をFlashで読み込んで表示している。この画像は http://wonderfl.net/c/wu8f で提供されている素材をまとめた。
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Loader;
/**
* ...
* @author itouhiro
*/
[SWF(width="465", height="465", frameRate="30", backgroundColor="0x888888")]
public class Main extends Sprite {
private var preload:Preloader;
static public var loading:int = 0;
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
preload = new Preloader();
trace('preload');
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
private function enterFrameHandler(e:Event):void {
if (loading <= 0) return;
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
var img:Loader = preload.get();
addChild(img);
}
}
}
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.text.TextFormat;
class Preloader extends Sprite{
private var preloadText:TextField = null;
private var ld:Loader;
public function Preloader():void {
trace('constructor');
ld = new Loader();
ld.load(new URLRequest('http://img.f.hatena.ne.jp/images/fotolife/i/itouhiro/20130624/20130624222235.png'));
ld.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgressHandler);
ld.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler);
}
public function get():Loader {
return ld;
}
private function loadCompleteHandler(e:Event):void {
removeChild(preloadText);
Main.loading++;
}
private function loadProgressHandler(e:ProgressEvent):void {
if ( ! preloadText) {
//preloader
preloadText = new TextField();
preloadText.x = 160; preloadText.y = 12; preloadText.width = 160;
preloadText.defaultTextFormat = new TextFormat('Verdana', 16);
preloadText.text = 'Loading: 0 %';
addChild(preloadText);
}
var percentLoaded:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100);
preloadText.text = 'Loading: ' + percentLoaded + ' %';
trace('Loading: ' + percentLoaded + ' %');
}
}読み込んだ画像をBitmapとして扱う
読み込んだ画像をマップチップとして扱うには‥
Mainクラスだけ変更している。Preloaderクラスは変更してない。
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
/**
* ...
* @author itouhiro
*/
[SWF(width="465", height="465", frameRate="30", backgroundColor="0x888888")]
public class Main extends Sprite {
private var preload:Preloader;
static public var loading:int = 0;
public function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
preload = new Preloader();
trace('preload');
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
private function enterFrameHandler(e:Event):void {
if (loading <= 0) return;
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
//画像を読み込み
var img:Bitmap = Bitmap(preload.get().content);
//画像の縦横比を3倍にしてmapDataにcopy
var mapData:BitmapData = new BitmapData(img.width * 3, img.height * 3, true, 0x00000000);
var matrix:Matrix = new Matrix(); matrix.scale(3, 3);
mapData.draw(img, matrix);
//地形をbgDataに配置
var mapTable:Array = [
[ 0, 9, 0, 0, 0, 0, 1, 0, 0, 0],
[ 0, 9, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 9, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 9, 0, 0, 0, 0, 0, 0, 6, 0],
[ 0, 9, 0, 0, 0, 0, 0, 0, 0, 0],
[ 1, 9, 0, 0, 0, 0, 0, 0, 0, 0],
[ 1, 9, 9, 9, 9, 9, 9, 4, 4, 9],
[ 1, 0, 0, 0, 9, 9, 0, 0, 0, 0],
[ 1, 1, 0, 0, 5, 5, 0, 0, 0, 0],
[ 1, 1, 1, 9, 9, 9, 9, 0, 0, 1],
];
var bgData:BitmapData = new BitmapData(mapTable[y].length * 48, mapTable.length * 48, false, 0x333333);
for (var y:int = 0; y < mapTable.length; y++) {
for (var x:int = 0; x < mapTable[y].length; x++) {
bgData.copyPixels(mapData, new Rectangle(mapTable[y][x]*48, 0, 48, 48), new Point(x*48, y*48));
}
}
//勇者を配置
bgData.copyPixels(mapData, new Rectangle(0, 48, 48, 48), new Point(mapTable[0].length * 48 / 2, mapTable.length * 48 / 2));
//画面表示
var bg:Bitmap = new Bitmap(bgData);
bg.x = -16; bg.y = -16;
addChild(bg);
}
}
}
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import flash.system.LoaderContext;
import flash.text.TextField;
import flash.text.TextFormat;
class Preloader extends Sprite{
private var preloadText:TextField = null;
private var ld:Loader;
public function Preloader():void {
trace('constructor');
ld = new Loader();
ld.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler);
ld.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgressHandler);
//ld.load(new URLRequest('http://assets.wonderfl.net/images/related_images/b/b7/b792/b79283aedf18f496ed0b3bbffbdb5165a389c381'), new LoaderContext(true));
//ld.load(new URLRequest('https://sites.google.com/site/itouhiro/2013/20130624wfquest.png'), new LoaderContext(true));
ld.load(new URLRequest('http://img.f.hatena.ne.jp/images/fotolife/i/itouhiro/20130624/20130624222235.png'), new LoaderContext(true));
}
public function get():Loader {
return ld;
}
private function loadCompleteHandler(e:Event):void {
removeChild(preloadText);
Main.loading++;
}
private function loadProgressHandler(e:ProgressEvent):void {
if ( ! preloadText) {
//preloader
preloadText = new TextField();
preloadText.x = 160; preloadText.y = 12; preloadText.width = 160;
preloadText.defaultTextFormat = new TextFormat('Verdana', 16, 0x000000);
preloadText.text = 'Loading: 0 %';
addChild(preloadText);
}
var percentLoaded:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100);
preloadText.text = 'Loading: ' + percentLoaded + ' %';
trace('Loading: ' + percentLoaded + ' %');
}
}ただし、これはローカルPCでは動作するが、Webにswf掲載すると「セキュリティの都合でpng画像を読めない」。 wonderfl.netにAS3投稿すれば、wonderfl.netに添付した画像なら読み込めるようだ。 投稿した。
https://sites.google.com/site/itouhiro/2013/20130624wfquest.swf
(追記 2013-07-11) キャラを操作できるようにした。キャラチェンジも可能にして、キャラ画像をすべて確認できるようにした。


0 件のコメント:
コメントを投稿