Actionscript 3 WASD在闪光SWF内的运动
因此,我打算在我的CPP中创建一个大房间,但是,我发现需要多个房间连接在一起,这有点令人讨厌。我想知道我是否可以增加链接在一起的房间的大小,并使用WASD在其中滚动 这就是我试图管理的环境: 这是我要开发的一个岛屿的一部分,这是一个粗略的画面,但你会想到它会继续向左。这就是我想要它滚动的地方Actionscript 3 WASD在闪光SWF内的运动,actionscript-3,flash,actionscript,Actionscript 3,Flash,Actionscript,因此,我打算在我的CPP中创建一个大房间,但是,我发现需要多个房间连接在一起,这有点令人讨厌。我想知道我是否可以增加链接在一起的房间的大小,并使用WASD在其中滚动 这就是我试图管理的环境: 这是我要开发的一个岛屿的一部分,这是一个粗略的画面,但你会想到它会继续向左。这就是我想要它滚动的地方 我这样做是不是疯了?这可能吗?任何评论都会有帮助!谢谢 您正在寻找的解决方案是一个屏蔽容器 将地图放在一个容器中 通过您感兴趣的事件(角色)设置X&Y坐标 到达地图边缘,单击按钮等…) 顶部的层(在本例中
我这样做是不是疯了?这可能吗?任何评论都会有帮助!谢谢 您正在寻找的解决方案是一个屏蔽容器
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;
}
导入flash.display.Sprite;
导入flash.display.Shape;
导入flash.events.Event;
导入flash.events.KeyboardEvent;
//我们的地图容器。
var容器:Sprite;
//为了平滑地设置动画到目标,请跟踪X&Y坐标。
变量destX:Number=0;
变量destY:Number=0;
init();
函数init():void{
//创建背景(主要用于mouseMove)
var bg:Sprite=新Sprite();
bg.graphics.beginll(0xFFFFFF);
bg.graphics.lineStyle(2,0x00);
bg.graphics.drawRect(100100,stage.stageWidth-200,stage.stageHeight-200);
bg.graphics.endFill();
addChild(bg);
//我们的集装箱“地图”
容器=新精灵();
addChild(容器);
//创建一个掩码
var m:Shape=新形状();
m、 图形填充(0x00);
m、 graphics.drawRect(0,0,stage.stageWidth-200,stage.stageHight-200);
m、 graphics.endFill();
m、 x=m.y=100;
container.mask=m;
//事件侦听器
stage.addEventListener(KeyboardEvent.Keyu向下,键盘移动);
addEventListener(“鼠标移动”,光标移动);
addEventListener(“enterFrame”,updateMap);
//用形状填充地图
对于(变量i:int=0;i<1000;i++){
var c:Shape=createCircle();
容器.addChild(c);
c、 x=随机(0,stage.stageWidth*2);//随机x坐标
c、 y=随机(0,stage.stageHeight*2);//随机y坐标
}
}
函数createCircle():形状{
//创建随机大小/颜色的圆
变量c:Shape=新形状();
c、 graphics.beginll(随机(0x000000,0xFFFFFF));//随机颜色
c、 graphics.drawCircle(0,0,随机(4,20));//随机大小
c、 graphics.endFill();
返回c;
}
功能键盘移动(e:键盘事件):无效{
无功转速:int=100
开关(如charCode){
案例115://s:down
速度=-速度;
案例119://w:向上
destY=夹具(destY+速度,-this.loaderInfo.height,0);
打破
案例100://d:对
速度=-速度;
案例97://a:左
destX=夹具(destX+速度,-this.loaderInfo.width,0);
打破
}
}
函数游标移动(e:事件):无效{
destX=-mouseX;
destY=-mouseY;
}
函数更新映射(e:事件):void{
container.x+=(destX-container.x)*0.1;
container.y+=(destY-container.y)*0.1;
}
函数随机(低:数,高:数):数{
返回Math.floor(Math.random()*(1+高-低))+低;
}
功能夹(原:编号、低:编号、高:编号):编号{
返回(原始>高)?高:(原始<低)?低:原始;
}
到目前为止,我还没想过要戴口罩!谢谢你的帮助!:)有没有办法让它在AS2中工作?我尝试迁移到AS3,但很快就意识到“环球”已经不存在,这意味着我必须使用该功能更改每个swf。我最终会把我的文件移到AS3上,但是,目前,有没有办法让它在AS2上运行?再次感谢!如果在AS2中有一种方法可以做到这一点,那是我所不知道的。在AS2中所做的任何事情在AS3中都有相似之处,但由于AS3更健壮的特性,情况并非如此。但是,如果您所做的只是使用_global来存储变量,那么您可以创建自己的变量(在您自己的文档代码中,或者在静态类中)。例如:var\u global:Object={}代码>\u global.myVar=“你好,世界!”代码>跟踪(_global.myVar)代码>尝试在“var\u global:Object={};”中添加但它仍然无法加载使房间可播放所需的文件。我假设load.swf中使用的代码是AS2,我也必须更改其中的代码,但是当我查看该文件时,我找不到_global.getCurrentEngine。谢谢你的帮助。