Il semble que mon son ne soit pas synchronisé et plus je joue du MovieClip, plus la synchronisation est longue. Ce n'est rien de trop compliqué, juste quelques sons de base qui tirent à chaque fois que je frappe la barre d'espace. Mon code est ci-dessous:synchronisation du son
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
{
}
}
}
La méthode d'attaque() est appelée d'une autre classe qui gère tous les contrôles du clavier. quand il est appelé le son joue alors. Firesound et Firesound2 sont presque les mêmes. firesound2 sonne un peu hors de la hauteur pour le rendre plus réaliste. Au début, le son sonne plutôt bien, pas génial. mais alors ça devient terrible au fil du temps. Je ne sais pas si c'est un problème connu. Mais si quelqu'un a des idées, faites le moi savoir. Merci!
J'ai fait un nouveau projet .fla. et je lui ai attaché la classe suivante par lui-même. donc le suivant est le seul code dans le projet .fla entier et le problème se produit toujours. J'appuie sur la barre d'espace et le son commence un jour en retard.
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();
}
}
}
}
}
La latence d'émission est-elle la conséquence (c'est-à-dire que plus vous jouez longtemps, plus le temps s'écoule entre l'appui sur la touche de prise de vue et l'augmentation du son)? Ou est le problème de qualité sonore? Ou les deux? – heavilyinvolved
Je vous suggère d'écrire un cas de test. c'est-à-dire le moins de code requis pour reproduire le problème. – Jotham
merci pour la réponse. il semble que ce soit juste la latence, pas la qualité. la qualité reste la même. Le son reste le même. seule chose qui manque à travers le temps est le timing pour lequel le son commence quand j'appuie sur la barre d'espace. – numerical25