Actionscript 3 在Actionscript 3游戏中只设置一次变量?
我正在尝试创建一个简单的游戏。我已经建立了一个层“actionscript”,我把所有的代码都放在里面。然后我有一个图像,实例名是“player”。这是我的密码:Actionscript 3 在Actionscript 3游戏中只设置一次变量?,actionscript-3,actionscript,Actionscript 3,Actionscript,我正在尝试创建一个简单的游戏。我已经建立了一个层“actionscript”,我把所有的代码都放在里面。然后我有一个图像,实例名是“player”。这是我的密码: stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDown); var power = 5; var friction = 0.95; var xspeed = 0; var yspeed = 0; function KeyDown(keyEvent:KeyboardEvent)
stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDown);
var power = 5;
var friction = 0.95;
var xspeed = 0;
var yspeed = 0;
function KeyDown(keyEvent:KeyboardEvent) {
if(keyEvent.keyCode==37) { //left
xspeed -= power;
}
if(keyEvent.keyCode==39) { //right
xspeed += power;
}
xspeed *= friction;
player.x += xspeed;
//trace(keyEvent.keyCode.toString());
}
突然,脚本每次都会重置xspeed
(和yspeed
),因此速度不能上升或下降。如何预防
我正在Actionscript中尝试我的翅膀,因此我想提供一些提示和帮助:)
Martti Laine我认为你的问题在于你的时间轴上有多个帧,因此每次播放头移动到另一帧时,脚本都会再次运行,所有内容基本上都会重置 以下是我的做法(如果您愿意尝试更高级的东西):
第一步确保在舞台上没有选择任何内容,并在
PUBLISH
标题下找到标记为Class:
的字段将文本
DocumentClass
粘贴到其中。现在,在与fla文件相同的目录中创建文件名
DocumentClass.as
然后将以下内容粘贴到其中,保存并运行fla文件
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
// Start class
// This class must extend MovieClip
public class DocumentClass extends MovieClip{
private var acceleration:Number = 2;
private var friction:Number = 0.95;
// Limits the player's speed to prevent it from moving too fast
private var maxSpeed:Number = 6;
// The players velocity
private var playerSpeedX:Number = 0;
private var playerSpeedY:Number = 0;
// Keeps track of what keys are pressed
private var keyLeft:Boolean;
private var keyRight:Boolean;
// The contructor for DocumentClass - this is automatically called
public function DocumentClass(){
addEventListener(Event.ENTER_FRAME, eventEnterFrame, false, 0, true);
stage.addEventListener(KeyboardEvent.KEY_DOWN, eventKeyDown, false, 0, true);
stage.addEventListener(KeyboardEvent.KEY_UP, eventKeyUp, false, 0, true);
}
// This function is called when a key is pressed
private function eventKeyDown(keyEvent:KeyboardEvent):void{
switch(keyEvent.keyCode){
// Left
case 37: keyLeft = true; break;
// Right
case 39: keyRight = true; break;
}
}
// This function is called when a key is released
private function eventKeyUp(keyEvent:KeyboardEvent):void{
switch(keyEvent.keyCode){
// Left
case 37: keyLeft = false; break;
// Right
case 39: keyRight = false; break;
}
}
// This function is called every frame.
// Move the player every frame instead of in the keyboard events.
private function eventEnterFrame(event:Event):void{
// If the left key is pressed and the player's speed is under the limit.
if(keyLeft && playerSpeedX > -maxSpeed)
playerSpeedX -= acceleration;
// Otherwise if the right key is pressed and the player's speed is under the limit.
else if(keyRight && playerSpeedX < maxSpeed)
playerSpeedX += acceleration;
playerSpeedX *= friction;
// I find that when the playerSpeedX values start to get really small the player
// will seems to just slowly move for a long so I clip the speed when it becomes very small
if(playerSpeedX < 0.1 && playerSpeedX > -0.1) playerSpeedX = 0;
player.x += playerSpeedX;
}
}// End class
}
包{
导入flash.display.MovieClip;
导入flash.events.Event;
导入flash.events.KeyboardEvent;
//开始上课
//此类必须扩展MovieClip
公共类DocumentClass扩展了MovieClip{
专用var加速:数字=2;
私人var摩擦:数值=0.95;
//限制玩家的速度以防止其移动过快
专用var maxSpeed:Number=6;
//运动员的速度
私有变量playerSpeedX:Number=0;
私有变量playerspeydy:Number=0;
//跟踪按下的键
私有变量keyLeft:布尔值;
私有var-keyRight:布尔值;
//DocumentClass的构造函数-这是自动调用的
公共函数DocumentClass(){
addEventListener(Event.ENTER_FRAME,eventEnterFrame,false,0,true);
stage.addEventListener(KeyboardEvent.KEY_DOWN,eventKeyDown,false,0,true);
stage.addEventListener(KeyboardEvent.KEY\u UP,eventKeyUp,false,0,true);
}
//按下某个键时调用此函数
私有函数eventKeyDown(keyEvent:KeyboardEvent):无效{
开关(keyEvent.keyCode){
//左
案例37:keyLeft=true;break;
//对
案例39:keyRight=true;break;
}
}
//释放钥匙时调用此函数
私有函数eventKeyUp(keyEvent:KeyboardEvent):无效{
开关(keyEvent.keyCode){
//左
案例37:keyLeft=false;break;
//对
案例39:keyRight=false;break;
}
}
//此函数每帧调用一次。
//每帧移动播放器,而不是在键盘事件中移动。
私有函数eventEnterFrame(事件:事件):void{
//如果按下左键且播放器的速度低于限制。
if(keyLeft&&playerSpeedX>-maxSpeed)
playerSpeedX-=加速度;
//否则,如果按下右键且播放器的速度低于限制。
else if(键右键和播放器速度-0.1)playerSpeedX=0;
player.x+=playerSpeedX;
}
}//末级
}
当然,如果您现在有点不明白,我已经稍微修改了您的原始代码:
stage.addEventListener(KeyboardEvent.KEY_DOWN, eventKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, eventKeyUp);
addEventListener(Event.ENTER_FRAME, eventEnterFrame);
var power:Number = 5;
var friction:Number = 0.95;
var keyLeft:Boolean;
var keyRight:Boolean;
var xspeed:Number = 0;
var yspeed:Number = 0;
function eventKeyDown(keyEvent:KeyboardEvent):void{
// Left
if(keyEvent.keyCode==37){
keyLeft = true;
}
// Right
if(keyEvent.keyCode==39){
keyRight = true;
}
}
function eventKeyUp(keyEvent:KeyboardEvent):void{
// Left
if(keyEvent.keyCode==37){
keyLeft = false;
}
// Right
if(keyEvent.keyCode==39){
keyRight = false;
}
}
function eventEnterFrame(event:Event):void{
if(keyLeft) xspeed -= power;
if(keyRight) xspeed += power;
xspeed *= friction;
if(xspeed < 0.1 && xspeed > -0.1) xspeed = 0;
player.x += xspeed;
}
stage.addEventListener(KeyboardEvent.KEY\u DOWN,eventKeyDown);
stage.addEventListener(KeyboardEvent.KEY\u UP,eventKeyUp);
addEventListener(Event.ENTER_FRAME,eventEnterFrame);
无功功率:数字=5;
var摩擦:数值=0.95;
var-keyLeft:布尔型;
var-keyRight:布尔型;
var xspeed:Number=0;
var y速度:数字=0;
函数eventKeyDown(keyEvent:KeyboardEvent):无效{
//左
if(keyEvent.keyCode==37){
keyLeft=true;
}
//对
if(keyEvent.keyCode==39){
keyRight=true;
}
}
函数eventKeyUp(keyEvent:KeyboardEvent):无效{
//左
if(keyEvent.keyCode==37){
keyLeft=false;
}
//对
if(keyEvent.keyCode==39){
keyRight=false;
}
}
函数eventEnterFrame(事件:事件):void{
如果(keyLeft)xspeed-=功率;
如果(keyRight)xspeed+=功率;
X速度*=摩擦力;
如果(xspeed<0.1&&xspeed>-0.1)xspeed=0;
player.x+=xspeed;
}