0
所以,我打算在我的CPPS内部建一个大房间,但是,我发现需要将多个房间连接在一起,并且有点烦人。我想知道是否可以增加连接在一起的房间的大小,并使用WASD进行滚动。Flash SWF中的WASD移动
这是我想管理环境:
这是一个海岛,我要开发的一部分,这是一个粗糙的画面,但你的想法,它将继续向左侧。这是我希望它滚动的地方。
我是一个疯狂的尝试做到这一点?这甚至有可能吗?任何意见将有所帮助!谢谢!
所以,我打算在我的CPPS内部建一个大房间,但是,我发现需要将多个房间连接在一起,并且有点烦人。我想知道是否可以增加连接在一起的房间的大小,并使用WASD进行滚动。Flash SWF中的WASD移动
这是我想管理环境:
这是一个海岛,我要开发的一部分,这是一个粗糙的画面,但你的想法,它将继续向左侧。这是我希望它滚动的地方。
我是一个疯狂的尝试做到这一点?这甚至有可能吗?任何意见将有所帮助!谢谢!
您正在寻找的解决方案是一个蒙面容器。
myContainer.mask = myShape
一个有趣的 面膜添加到容器中,我继续写,你可以在一个干净的运行实例项目。这应该演示地图平移概念。试试你的WASD键,或者干脆移动鼠标。
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.Event;
import flash.events.KeyboardEvent;
// Our container for the map.
var container:Sprite;
// For the sake of smoothly animating to its destination, track the X & Y coordinates.
var destX:Number = 0;
var destY:Number = 0;
init();
function init():void {
// Create a backdrop (mostly for mouseMove)
var bg:Sprite = new Sprite();
bg.graphics.beginFill(0xFFFFFF);
bg.graphics.lineStyle(2, 0x00);
bg.graphics.drawRect(100, 100, stage.stageWidth - 200, stage.stageHeight - 200);
bg.graphics.endFill();
addChild(bg);
// Our container "map"
container = new Sprite();
addChild(container);
// Create a mask
var m:Shape = new Shape();
m.graphics.beginFill(0x00);
m.graphics.drawRect(0, 0, stage.stageWidth - 200, stage.stageHeight - 200);
m.graphics.endFill();
m.x = m.y = 100;
container.mask = m;
// Event Listeners
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardMovement);
addEventListener("mouseMove", cursorMovement);
addEventListener("enterFrame", updateMap);
// Populate the map with shapes
for (var i:int = 0; i < 1000; i++) {
var c:Shape = createCircle();
container.addChild(c);
c.x = random(0, stage.stageWidth * 2); // Random X Coordinate
c.y = random(0, stage.stageHeight * 2); // Random Y Coordinate
}
}
function createCircle():Shape {
// Creates a randomly sized/colored circle
var c:Shape = new Shape();
c.graphics.beginFill(random(0x000000, 0xFFFFFF)); // Random Color
c.graphics.drawCircle(0,0,random(4,20)); // Random Size
c.graphics.endFill();
return c;
}
function keyboardMovement(e:KeyboardEvent):void {
var speed:int = 100
switch (e.charCode) {
case 115: // s:down
speed = -speed;
case 119: // w:up
destY = clamp(destY + speed, -this.loaderInfo.height, 0);
break;
case 100: // d:right
speed = -speed;
case 97: // a:left
destX = clamp(destX + speed, -this.loaderInfo.width, 0);
break;
}
}
function cursorMovement(e:Event):void {
destX = -mouseX;
destY = -mouseY;
}
function updateMap(e:Event):void {
container.x += (destX - container.x) * 0.1;
container.y += (destY - container.y) * 0.1;
}
function random(low:Number, high:Number):Number {
return Math.floor(Math.random() * (1+high-low)) + low;
}
function clamp(original:Number, low:Number, high:Number):Number {
return (original > high) ? high : (original < low) ? low : original;
}
我不认为我会想过直到现在才使用口罩!感谢您的帮助! :) –
有没有办法让这个在AS2中工作?我试图转向AS3,但很快意识到_global不再存在,意味着我将不得不使用该功能来更改每个swf。我将最终将文件移到AS3,但是,暂时来说,有没有办法在AS2中运行这个文件?再次感谢! –
如果在AS2中有办法做到这一点,这是我的知识之外。几乎所有你在AS2中做的事情都有AS3中的模拟,但由于AS3更强大的特性,反之亦然。然而,如果你所做的只是使用_global来存储变量,你可以创建自己的(无论是在你自己的文档代码中,还是在静态类中)。例如: 'var _global:Object = {};' '_global.myVar =“Hello World!”;' 'trace(_global.myVar);' – Atriace