Похоже, что мой звук не синхронизирован, и чем дольше я играю видеоклип, тем дальше он отключается. Ничего сложного, только некоторые базовые звуки стрельбы, которые звучат каждый раз, когда я нажимаю клавишу пробела. Мой код ниже:
package com.objects{
import flash.display.MovieClip;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.events.Event;
public class Avatar extends gameObject implements IKiller{
public var targets:Array;
public var delay:Number = 3000;
public var weapon:Number = 1;
private var fireSound:Sound;
private var fireSound2:Sound;
private var systems:Array;
private var ext:Number = -1;
private var channelTracer:SoundChannel;
private var channelCount:Number = 0;
public function Avatar():void
{
systems = new Array();
channelTracer = new SoundChannel();
var soundUrl = new URLRequest("com/images/mashingun_darkt.mp3");
fireSound = new Sound();
fireSound.load(soundUrl);
var soundUrl = new URLRequest("com/images/mashingun_light.mp3");
fireSound2 = new Sound();
fireSound2.load(soundUrl);
rotation = -90;
lastTime = getTime();
targets = new Array();
}
private function soundFinished(e:Event):void {
channelCount--;
trace(channelCount);
}
public function get Systems():Array
{
return systems;
}
override public function Attack(dir:Number = -40):void
{
switch(weapon){
case 1:
var bullet1:Bullet = new Bullet();
bullet1.wielder = this;
bullet1.x = x + 35;
bullet1.y = y + 30;
bullet1.bulletDir = rotation;
eApi.addGameChild(bullet1);
var bullet2:Bullet = new Bullet();
bullet2.bulletDir = rotation;
bullet2.wielder = this;
bullet2.x = x - 35;
bullet2.y = y + 30;
eApi.addGameChild(bullet2);
var rand = Math.ceil(Math.random() * 100);
if (rand < 50) {
channelTracer = fireSound.play();
//RndSound = RndSound+50;
} else {
channelTracer = fireSound2.play();
}
channelTracer.addEventListener(Event.SOUND_COMPLETE, soundFinished);
channelCount++;
trace(channelCount);
break;
case 2:
if((getTime() - lastTime) > delay)
{
var missle = new Missile();
missle.shootOut *= ext;
ext *= -1;
missle.x = x;
missle.y = y;
trace(ext);
missle.wielder = this;
eApi.addGameChildAt((eApi.numChildren - 2),missle);
lastTime = getTime();
}
break;
case 3:
var bullet1:Bullet = new Bullet();
bullet1.wielder = this;
bullet1.x = x + 35;
bullet1.y = y + 30;
bullet1.bulletDir = -80;
eApi.addGameChild(bullet1);
var laser = new StingerLaser();
laser.laserDir = -90;
laser.wielder.push(this);
laser.x = x + 20;
laser.y = y + -3;
eApi.addGameChild(laser);
var laser2 = new StingerLaser();
laser2.laserDir = -90;
laser2.wielder.push(this);
laser2.x = x + -20;
laser2.y = y + -3;
eApi.addGameChild(laser2);
var bullet2:Bullet = new Bullet();
bullet2.bulletDir = -100;
bullet2.wielder = this;
bullet2.x = x - 35;
bullet2.y = y + 30;
eApi.addGameChild(bullet2);
break;
case 4:
if((getTime() - lastTime) > delay)
{
var missle1 = new Missile();
missle1.shootOut = 2;
missle1.x = x;
missle1.y = y;
missle1.wielder = this;
eApi.addGameChildAt((eApi.numChildren - 2),missle1);
var missle2 = new Missile();
missle2.shootOut = -2;
missle2.x = x;
missle2.y = y;
missle2.wielder = this;
eApi.addGameChildAt((eApi.numChildren - 2),missle2);
lastTime = getTime();
}
break;
case 5:
if((getTime() - lastTime) > delay)
{
var side:Number = 1;
for(var i = 0; i < 20; i+=2)
{
var missle1 = new Missile();
missle1.shootOut = (i+2) * side;
side *= -1;
missle1.straightShot = true;
missle1.x = x;
missle1.y = y;
missle1.wielder = this;
eApi.addGameChildAt((eApi.numChildren - 2),missle1);
}
lastTime = getTime();
}
break;
default:
}
}
public function Hit(dmg:Number = .01):void {
if(health > 0)
health -= dmg;
if(health < 0)
health = 0,trace("dead");
}
override public function updateObject():void
{
}
}
}
Метод Attack () вызывается из другого класса, который обрабатывает все элементы управления клавиатуры. когда он вызывается звук, то играет. firesound и firesound2 почти одинаковы. Firesound2 звучит немного нестандартно, чтобы сделать его более реалистичным. Сначала звук звучит довольно хорошо, но не очень. но со временем это становится ужасным. Не уверен, что это известная проблема. Но если у кого-то есть идеи, дайте мне знать. спасибо!
Я сделал новый проект .fla. и я сам прикрепил к нему следующий класс. поэтому следующий код является единственным во всем проекте .fla, и проблема все еще возникает. Я нажимаю пробел, и звук начинается на день позже.
package {
import flash.display.MovieClip;
import flash.events.*;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
public class test extends MovieClip
{
private var fireSound:Sound;
private var fireSound2:Sound;
private var aKeyPress:Array;
public function test():void
{
aKeyPress = new Array();
var soundUrl = new URLRequest("com/images/mashingun_darkt.mp3");
fireSound = new Sound();
fireSound.load(soundUrl);
var soundUrl = new URLRequest("com/images/mashingun_light.mp3");
fireSound2 = new Sound();
fireSound2.load(soundUrl);
addEventListener(Event.ENTER_FRAME, loop);
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownListener);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpListener);
}
private function keyDownListener(e:KeyboardEvent) {
//trace("down e.keyCode=" + e.keyCode);
aKeyPress[e.keyCode]=true;
}
private function keyUpListener(e:KeyboardEvent) {
//trace("up e.keyCode=" + e.keyCode);
aKeyPress[e.keyCode]=false;
}
public function loop(e:Event):void
{
if (aKeyPress[32]){//Right
var rand = Math.ceil(Math.random() * 100);
if (rand < 50) {
fireSound.play();
//RndSound = RndSound+50;
} else {
fireSound2.play();
}
}
}
}
}