Flash 十万奥兹';它在AS3中

Flash 十万奥兹';它在AS3中,flash,actionscript-3,audio,Flash,Actionscript 3,Audio,我正在制作一个以鸟为化身的Flash游戏。当小鸟捡起一辆铁鸟皮卡时,就会播放歌曲《铁人》。但问题是:它一直在制作这种音频的新实例。所以我有十万个奥兹在唱这首歌。但它们之间有一秒的延迟。是否有某种功能只播放一次歌曲?还是一个小脚本来完成这个任务 这是我的剧本: var IronManMusic:Sound = new IronManSong(); var IronManChannel:SoundChannel = new SoundChannel(); var backgroundMusic:S

我正在制作一个以鸟为化身的Flash游戏。当小鸟捡起一辆铁鸟皮卡时,就会播放歌曲《铁人》。但问题是:它一直在制作这种音频的新实例。所以我有十万个奥兹在唱这首歌。但它们之间有一秒的延迟。是否有某种功能只播放一次歌曲?还是一个小脚本来完成这个任务

这是我的剧本:

var IronManMusic:Sound = new IronManSong();
var IronManChannel:SoundChannel = new SoundChannel();

var backgroundMusic:Sound = new BackgroundMusic(); 
var myChannel:SoundChannel = new SoundChannel();
myChannel = backgroundMusic.play();

 if(ironbird==true){
  laatstejump = 9;
  myChannel.stop();
  IronManChannel = IronManMusic.play();
 }

ironbird布尔值可在Updatescreen函数中找到。我想这就是问题所在,但我不确定。非常感谢您的帮助!:)

嗯。。。看起来应该是:

if(ironbird==true) {
  [...]
  ironbird = false;
}
或者至少您提到的Updatescreen函数应该在一次勾选/迭代后将
ironbird
设置回
false

编辑:查看您作为答案发布的代码,更容易:

你在干什么

if(birdie.hitTestPoint(ironbirdpickup.x,ironbirdpickup.y,true)){
    ironbird = true;
    ironbirdpickup = Null;
}

if(ironbird==true){
    laatstejump = 9;
    myChannel.stop();
    IronManChannel = IronManMusic.play();
}
并使用
ironbird
变量进行动画和其他操作。移动声音触发器只能触发声音一次(或触发hitTestPoint的频率)


你仍然应该在某个地方将
ironbird
重置为
false
,例如当动画完成时。

不知道你对音频和动画部分的确切意思,但这是我的脚本

//loads keyboard events
import flash.events.KeyboardEvent

var laatstelook:int = 1;
var ironbird:Boolean = false;
var laatstejump = 1;
var movebirdie:int = 2;
var birdfatigue : Boolean = false;
var birdtellery:int = 0;
var birdtelleryvertrager = 0;
var vy:Number=0;
var movement:Boolean=false;
var springen:Boolean=false;
var gv:Number=0.1;
var keyArray:Array = new Array();
var i:Number;
var leftOrrightpressed:Number=0;
var platformraak=false;
var PlatformArray:Array = new Array();

var IronManMusic:Sound = new IronManSong();
var IronManChannel:SoundChannel = new SoundChannel();

var backgroundMusic:Sound = new BackgroundMusic(); 
var myChannel:SoundChannel = new SoundChannel();
myChannel = backgroundMusic.play();

for(i=0;i<222;i++){
    keyArray.push([i,false]);
}
//creating multiple objects from 1 object
for (var a:int = numChildren - 1; a >= 0; a--){
    var child:DisplayObject = getChildAt(a);
    if (child.name == "platform"){
        PlatformArray.push(child);
    }
}

stage.addEventListener(KeyboardEvent.KEY_DOWN,checkKeysDown);
stage.addEventListener(KeyboardEvent.KEY_UP,checkKeysUp);
this.addEventListener(Event.ENTER_FRAME, UpdateScreen);
function UpdateScreen(event:Event):void{

    //No multiple jumps in air
    if(springen==true){

        birdie.gotoAndStop(laatstejump);
        birdtelleryvertrager+=0.2;
        birdie.y-=15;
        birdie.y+=birdtelleryvertrager;
        birdtellery++;

        if(isKeyDown(39)==true){
            birdie.x += 5;
            background.x += 1;
            vcam.x += 5;
            if(birdie.x <= 261.95){
                vcam.x = 275.5;
                background.x -= 1;
            }
                if(ironbird != true){
                    birdie.gotoAndStop(5);
                }else{birdie.gotoAndStop(13);}
        }

        if(isKeyDown(37)==true){
            birdie.x-=5;
            vcam.x -= 5;
            background.x -= 1;
            if(birdie.x <= 261.95){
                vcam.x = 275.5;
                background.x += 1;
            }
            birdie.gotoAndStop(6);
        }

        //bird falls down
        if(birdtellery>25){
            birdfatigue == true;
            if(isKeyDown(39)==true){
                birdie.x-=4;
                vcam.x -= 4;
            }

            if(isKeyDown(37)==true){
                birdie.x += 4;
                vcam.x += 4;
            }

            birdtelleryvertrager+=0.8;
        }

        //bird can jump again (when on platform)
        if(birdtellery>30){
            springen=false;
        }

    }else{
            if(birdfatigue == true){
                birdie.gotoAndStop(7);
            }

            //if right arrow button is pressed
            if(isKeyDown(39)==true){
                birdie.x += movebirdie;

                if(birdie.x >= 261.95){
                    vcam.x += movebirdie;
                    background.x += 0.5;
                }
                if(ironbird != true){
                    birdie.gotoAndStop(2);
                    laatstelook =1;
                }else{birdie.gotoAndStop(11);
                        laatstelook =9;
                    }

                laatstejump =5;
                leftOrrightpressed =1;

            }

            if(isKeyDown(39)==false){
                if (leftOrrightpressed ==1){
                    birdie.gotoAndStop(laatstelook);
                }

            }

            //if left arrow button is pressed
            if(isKeyDown(37)==true){

                birdie.x -= movebirdie;
                background.x -= 0.5;
                vcam.x -= movebirdie;
                if(birdie.x <= 261.95){
                    vcam.x = 275.5;
                    background.x += 0.5;
                }
                if(ironbird != true){
                    birdie.gotoAndStop(3);
                    laatstelook =4;
                }else{birdie.gotoAndStop(12);
                        laatstelook = 10;
                    }

                laatstejump=6;
                leftOrrightpressed =2;
            }

            if(isKeyDown(37)==false){
                if (leftOrrightpressed ==2){
                    birdie.gotoAndStop(laatstelook);
                }
            }

            //if space button is pressed
            if(isKeyDown(32)==true && springen==false){
                springen=true;  
            }

        }

    if(birdie.hitTestPoint(ironbirdpickup.x,ironbirdpickup.y,true)){
        ironbird = true;
        ironbirdpickup = Null;
    }

    if(ironbird==true){
        laatstejump = 9;
        myChannel.stop();
        IronManChannel = IronManMusic.play();
    }



    addEventListener(Event.ENTER_FRAME,ctrl_birdie);


    function ctrl_birdie(e:Event){

        //when bird touches one of the platforms, bird stops falling
        for(var a in PlatformArray){
            if(PlatformArray[a].hitTestPoint(birdie.x,birdie.y,true)){
                birdtelleryvertrager=0;
                birdtellery = 0;
                birdie.y-=1;
            }
        }
    }

    if(birdie.hitTestPoint(platform.platformboundingbox.x,platform.platformboundingbox.y,true)){
        trace("hit");
    }

    //gravity
    vy = 10;
    birdie.y+=vy;
}

//checks if certain key is pressed
function checkKeysDown(event:KeyboardEvent):void{
    keyArray[event.keyCode][1]=true;
}
function checkKeysUp(event:KeyboardEvent):void{
    keyArray[event.keyCode][1]=false;
}
function isKeyDown(X){
    return keyArray[X][1];
}
//加载键盘事件
导入flash.events.KeyboardEvent
var laatstelook:int=1;
var ironbird:Boolean=false;
var laatstejump=1;
小鸟:int=2;
var birdfatigue:Boolean=false;
var birdtellery:int=0;
var birdtelleryvertrager=0;
变量vy:Number=0;
变量移动:布尔=假;
var-springen:Boolean=false;
var gv:数值=0.1;
var keyArray:Array=newarray();
变量i:数量;
var leftOrrightpressed:Number=0;
var platformraak=假;
var PlatformArray:Array=新数组();
var IronManMusic:Sound=新的IronManSong();
var IronManChannel:SoundChannel=新的SoundChannel();
var backgroundMusic:Sound=新的backgroundMusic();
var myChannel:SoundChannel=新的SoundChannel();
myChannel=背景音乐.play();
对于(i=0;i=0;a--){
变量child:DisplayObject=getChildAt(a);
if(child.name==“平台”){
平台阵列推送(儿童);
}
}
stage.addEventListener(KeyboardEvent.KEY_DOWN,CheckKeyDown);
stage.addEventListener(键盘事件、按键向上、检查按键向上);
this.addEventListener(Event.ENTER_FRAME,UpdateScreen);
函数UpdateScreen(事件:event):void{
//空中没有多次跳跃
如果(springen==true){
小鸟。跳高和停止(laatstejump);
birdtelleryvertrager+=0.2;
小鸟.y-=15;
小鸟.y+=小鸟;
birdtellery++;
如果(isKeyDown(39)=真){
小鸟.x+=5;
背景x+=1;
vcam.x+=5;
如果(小鸟x30){
springen=假;
}
}否则{
if(birdfatigue==true){
伯迪。戈托和斯托普(7);
}
//如果按下右箭头按钮
如果(isKeyDown(39)=真){
birdie.x+=移动birdie;
如果(birdie.x>=261.95){
vcam.x+=movebirdie;
背景x+=0.5;
}
if(ironbird!=真){
伯迪。戈托和斯托普(2);
laatstelook=1;
}else{birdie.gotoAndStop(11);
laatstelook=9;
}
laatstejump=5;
leftOrrightpressed=1;
}
if(isKeyDown(39)=false){
如果(左或右按下==1){
小鸟。戈托和斯托普(拉特斯特卢克);
}
}
//如果按下左箭头按钮
如果(isKeyDown(37)=真){
小鸟.x-=移动小鸟;
背景x-=0.5;
vcam.x-=移动小鸟;

如果(birdie.x啊…我希望它能这么简单。但是如果我这样做了,铁鸟的动画就不会播放了。还有很多不同的音频实例。但是在艰难之前就少了。无论如何,谢谢!)在这种情况下,请发布您使用的附加代码,例如使用
ironbird
的所有部分。还可以考虑将布尔值拆分为一个
ironbird\u play
变量,该变量仅用于触发声音,以及一个
ironbird\u任何用于动画等的变量。
//loads keyboard events
import flash.events.KeyboardEvent

var laatstelook:int = 1;
var ironbird:Boolean = false;
var laatstejump = 1;
var movebirdie:int = 2;
var birdfatigue : Boolean = false;
var birdtellery:int = 0;
var birdtelleryvertrager = 0;
var vy:Number=0;
var movement:Boolean=false;
var springen:Boolean=false;
var gv:Number=0.1;
var keyArray:Array = new Array();
var i:Number;
var leftOrrightpressed:Number=0;
var platformraak=false;
var PlatformArray:Array = new Array();

var IronManMusic:Sound = new IronManSong();
var IronManChannel:SoundChannel = new SoundChannel();

var backgroundMusic:Sound = new BackgroundMusic(); 
var myChannel:SoundChannel = new SoundChannel();
myChannel = backgroundMusic.play();

for(i=0;i<222;i++){
    keyArray.push([i,false]);
}
//creating multiple objects from 1 object
for (var a:int = numChildren - 1; a >= 0; a--){
    var child:DisplayObject = getChildAt(a);
    if (child.name == "platform"){
        PlatformArray.push(child);
    }
}

stage.addEventListener(KeyboardEvent.KEY_DOWN,checkKeysDown);
stage.addEventListener(KeyboardEvent.KEY_UP,checkKeysUp);
this.addEventListener(Event.ENTER_FRAME, UpdateScreen);
function UpdateScreen(event:Event):void{

    //No multiple jumps in air
    if(springen==true){

        birdie.gotoAndStop(laatstejump);
        birdtelleryvertrager+=0.2;
        birdie.y-=15;
        birdie.y+=birdtelleryvertrager;
        birdtellery++;

        if(isKeyDown(39)==true){
            birdie.x += 5;
            background.x += 1;
            vcam.x += 5;
            if(birdie.x <= 261.95){
                vcam.x = 275.5;
                background.x -= 1;
            }
                if(ironbird != true){
                    birdie.gotoAndStop(5);
                }else{birdie.gotoAndStop(13);}
        }

        if(isKeyDown(37)==true){
            birdie.x-=5;
            vcam.x -= 5;
            background.x -= 1;
            if(birdie.x <= 261.95){
                vcam.x = 275.5;
                background.x += 1;
            }
            birdie.gotoAndStop(6);
        }

        //bird falls down
        if(birdtellery>25){
            birdfatigue == true;
            if(isKeyDown(39)==true){
                birdie.x-=4;
                vcam.x -= 4;
            }

            if(isKeyDown(37)==true){
                birdie.x += 4;
                vcam.x += 4;
            }

            birdtelleryvertrager+=0.8;
        }

        //bird can jump again (when on platform)
        if(birdtellery>30){
            springen=false;
        }

    }else{
            if(birdfatigue == true){
                birdie.gotoAndStop(7);
            }

            //if right arrow button is pressed
            if(isKeyDown(39)==true){
                birdie.x += movebirdie;

                if(birdie.x >= 261.95){
                    vcam.x += movebirdie;
                    background.x += 0.5;
                }
                if(ironbird != true){
                    birdie.gotoAndStop(2);
                    laatstelook =1;
                }else{birdie.gotoAndStop(11);
                        laatstelook =9;
                    }

                laatstejump =5;
                leftOrrightpressed =1;

            }

            if(isKeyDown(39)==false){
                if (leftOrrightpressed ==1){
                    birdie.gotoAndStop(laatstelook);
                }

            }

            //if left arrow button is pressed
            if(isKeyDown(37)==true){

                birdie.x -= movebirdie;
                background.x -= 0.5;
                vcam.x -= movebirdie;
                if(birdie.x <= 261.95){
                    vcam.x = 275.5;
                    background.x += 0.5;
                }
                if(ironbird != true){
                    birdie.gotoAndStop(3);
                    laatstelook =4;
                }else{birdie.gotoAndStop(12);
                        laatstelook = 10;
                    }

                laatstejump=6;
                leftOrrightpressed =2;
            }

            if(isKeyDown(37)==false){
                if (leftOrrightpressed ==2){
                    birdie.gotoAndStop(laatstelook);
                }
            }

            //if space button is pressed
            if(isKeyDown(32)==true && springen==false){
                springen=true;  
            }

        }

    if(birdie.hitTestPoint(ironbirdpickup.x,ironbirdpickup.y,true)){
        ironbird = true;
        ironbirdpickup = Null;
    }

    if(ironbird==true){
        laatstejump = 9;
        myChannel.stop();
        IronManChannel = IronManMusic.play();
    }



    addEventListener(Event.ENTER_FRAME,ctrl_birdie);


    function ctrl_birdie(e:Event){

        //when bird touches one of the platforms, bird stops falling
        for(var a in PlatformArray){
            if(PlatformArray[a].hitTestPoint(birdie.x,birdie.y,true)){
                birdtelleryvertrager=0;
                birdtellery = 0;
                birdie.y-=1;
            }
        }
    }

    if(birdie.hitTestPoint(platform.platformboundingbox.x,platform.platformboundingbox.y,true)){
        trace("hit");
    }

    //gravity
    vy = 10;
    birdie.y+=vy;
}

//checks if certain key is pressed
function checkKeysDown(event:KeyboardEvent):void{
    keyArray[event.keyCode][1]=true;
}
function checkKeysUp(event:KeyboardEvent):void{
    keyArray[event.keyCode][1]=false;
}
function isKeyDown(X){
    return keyArray[X][1];
}