PDA

Volledige versie bekijken : undifined error - Hij pakt de code niet.


igirly
%Europe/Berlin %415 %2008, 09:58
Hallo,

Ik zit sinds dit jaar op de opleiding Game Design op het alfa college en voor ons project moeten wij de basis van flash leren. In een van deze opdrachten moest je een muziek speler maken die 2 liedjes kon afspelen waartussen je kunt wisselen met een button. Natuurlijk maakte iedereen die met 2 frames waartussen je kunt wisselen maar dit vind ik zelf een beetje saai, zo leer je nooit wat. Dus ik bedacht dat ik een muziek player ga maken met variabelen en daar ben ik dus nu mee bezig.

Alleen nu moet ik een variabele die "undefined" is alleen de eerste keer naar 0 zetten en ik heb daar deze code voor gebruikt die ik met een leraar van mij getest heb en die hoort te werken. Alleen als ik hem in mijn code toepas werkt het niet meer.

if(!musicnummer){
var musicnummer = 0;
trace('ik ben 0!' + musicnummer );
}

Ik hoop dat iemand mij hier bij kan helpen want ik wil heel graag snappen waarom dit niet gewoon werk.

Grtz Peter

Code:
// Arays aanmaken
var music = new Array();
music[0] = "Through_The_Fire_And_Flames.mp3";
music[1] = "Prayer_of_the_Refugee.mp3";

// Als er nog geen waarde aan musicnummer zit.
if(!musicnummer){
var musicnummer = 0;
trace('ik ben 0!' + musicnummer );
}

// Liedje afspelen
coolTune = new Sound (musicloader);
trace(music[musicnummer]);
trace(musicnummer);
coolTune.loadSound((music[musicnummer]), true);

Code in next button:
on(release){
musicnummer += 1;
}

Dauntless
%Europe/Berlin %445 %2008, 10:41
var musicnummer;
if(musicnummer == undefined){
musicnummer = 0;
trace('ik ben 0!' + musicnummer );
}


Gebruik overigens geen on(release), dat is uit de tijd van Flash 5 (technologie van 8 jaar geleden!!). Geef je button een instancenaam (bv 'myButton') en gebruik deze code op een frame:
myButton.onRelease = function(){
musicnummer += 1;
}

igirly
%Europe/Berlin %458 %2008, 11:00
Oke,

Dankjewel voor de tip! Alleen voor mijn gewone opdracht moet ik het werkend maken voor flash player 6 of hoger. Werkt dat ook met die manier van jou?

Grtz Peter

edit:///

Hey,

Ik heb hem werkende gekregen! volgens mij komt dat vooral door die button code inderdaad niet in de button te gebruiken maar in het script zelf. Harstikke bedank!

Grtz Peter

Dauntless
%Europe/Berlin %479 %2008, 11:30
FP6 is Flash MX en het is vanaf die versie dat '.onRelease' (en anderen) beschikbaar zijn.

Als je twijfelt, druk je even op F1 en zoek je 'onRelease' op. Er staat bovenaan de pagina dan vanaf welke player versie het beschikbaar is.

igirly
%Europe/Berlin %492 %2008, 11:49
Oke dankjewel. Alleen ik heb nu nog een vraagje :) want ik speel dus het liedje af met deze code:

coolTune = new Sound (musicloader);
coolTune.loadSound((music[musicnummer]), true);

En is het ook mogelijk om datzelfde liedje weer op pauze en play te zetten?

Grtz Peter

Dauntless
%Europe/Berlin %503 %2008, 12:04
Dat is mogelijk ja. Bekijk even alle verschillende methodes van de Sound classe:
http://livedocs.adobe.com/flash/9.0/main/00002125.html

igirly
%Europe/Berlin %532 %2008, 12:46
Hey,

Ik heb net ff gekeken en ik denk dat ik deze 2 nodig heb. Maar als ik hier naar kijk dan snap ik er niks van :S Zou je dit misschien willen uitleggen?

Grtz Peter

start([secondOffset:Number], [loops:Number]) : Void
Starts playing the last attached sound from the beginning if no parameter is specified, or starting at the point in the sound specified by the secondOffset parameter.

stop([linkageID:String]) : Void
Stops all sounds currently playing if no parameter is specified, or just the sound specified in the idName parameter.

Edit://

Hey,

Ik heb inmiddels volgens mij die code goed toegepast. In iedergeval als ik nu op pauze druk dan stopt hij maar als ik vervolgens weer op play druk dan doet hij niks. En als ik een liedje afspeel en ik druk weer op play dan start ie hem overnieuw. Hoe kan ik er voor zorgen dat hij hem pauzeert ipv volledig stopt en hem daarna weer door kan laten gaan waar ie gebleven was?

Grtz Peter

button_pauze.onRelease = function(){
coolTune.stop()
}
button_play.onRelease = function(){
coolTune.start()
}

Dauntless
%Europe/Berlin %545 %2008, 13:06
Wat tussen de haakjes staat zijn de argumenten. (Net zoals je een number meegeeft aan gotoAndPlay()). Als ze tussen [vierkante haken] staan, wil dat zeggen dat ze optioneel zijn. Je kan dus zowel mySound.start(), mySound.start(10) als mySound.start(10, 5)

Jan
%Europe/Berlin %555 %2008, 13:19
Hoe kan ik er voor zorgen dat hij hem pauzeert ipv volledig stopt en hem daarna weer door kan laten gaan waar ie gebleven was?
Bij een stop (pauze) sla je de position op in een variabele
position (Sound.position property)
public position : Number [read-only]
The number of milliseconds a sound has been playing.

Die variabele gebruik je later als secondOffset in :
start([secondOffset:Number])

Groeten,
Jan

igirly
%Europe/Berlin %560 %2008, 13:26
OKe harstikke bedankt! Hier kan ik wel weer even mee verder :D Als het helemaal af is zal ik jullie wel even laten zien hoe mijn eerste echte actionscript ding geworden is ;)

Edit://

Hey,

Ik heb weer geprobeert om de code toe te passen. Het opslaan van de tijd lukt me wel alleen tijdens het opnieuw afspelen gaat het nog niet helemaal goed... Wat doe ik hier fout?

Grtz Peter

button_pauze.onRelease = function(){
positie = (coolTune.position);
trace(positie);
coolTune.stop();
}
button_play.onRelease = function(){
//coolTune.start(positie);
//coolTune.loadSound((music[musicnummer]), true);
coolTune.start(music[musicnummer].positie);
trace(positie);

}

igirly
%Europe/Berlin %937 %2008, 22:30
Hey,

Ik heb nou inmiddels al weer een beste tijd geprobeert met die code maar ik kom er echt niet uit :S Kan niemand mij nog verder helpen?

Grtz

Dauntless
%Europe/Berlin %951 %2008, 22:50
Als je het opvraagt via music[musicnummer].positie, sla het dan ook op onder die variabele:
music[musicnummer].positie = (coolTune.position);
trace(positie);
coolTune.stop();

En als dat niet werkt moet je even wat meer code geven (wat is music en hoe wordt hij gevuld ?)

igirly
%Europe/Berlin %321 %2008, 07:42
Hey,

Ik kom er nog steeds niet uit :S dus hier is de totale code die ik heb. Dit is de eerste keer dat ik met as werk he ;) Zou je mij ook uit kunnen leggen wat ik verkeerd doe?

Grtz Peter

////////////////// begin config /////////////////////
arraymax = 4; // laatste array nummer ///////////////
///////////////// inde config ///////////////////////

// music Arays aanmaken
var music = new Array();
music[0] = "00_Through_The_Fire_And_Flames.mp3";
music[1] = "01_Prayer_of_the_Refugee.mp3";
music[2] = "02_Dom_Lomp_en_mellow.mp3";
music[3] = "03_New_Soul.mp3";
music[4] = "04_Me_Nikes.mp3";

// music Arays aanmaken
var musictext = new Array();
musictext[0] = "Dragonforce - Through The Fire And Flames";
musictext[1] = "Prayer_of_the_Refugee";
musictext[2] = "Dom_Lomp_en_mellow";
musictext[3] = "New_Soul";
musictext[4] = "Me_Nikes";

// Als button word ingedrukt
button_next.onRelease = function(){
// musicnummer + 1 (volgende afspelen)
musicnummer += 1;
// chekken of het nummer bestaad
if(musicnummer > arraymax){
musicnummer = 0;
}
// Liedje afspelen
coolTune = new Sound (musicloader);
trace(music[musicnummer]);
trace(musicnummer);
coolTune.loadSound((music[musicnummer]), true);
// nieuwe text
musictext1 = (musictext[musicnummer]);
trace(musictext1);
}

// Als musicnummer = 0
if(musicnummer == 0){
// Liedje afspelen
coolTune = new Sound (musicloader);
trace(music[musicnummer]);
trace(musicnummer);
coolTune.loadSound((music[musicnummer]), true);
// text
musictext1 = (musictext[musicnummer]);
}

// Pauze acties
button_pauze.onRelease = function(){
music[musicnummer].positie = (coolTune.position);
trace(positie);
coolTune.stop();
}

// Play acties
button_play.onRelease = function(){
//coolTune.start(positie);
//coolTune.loadSound((music[musicnummer]), true);
coolTune.start(music[musicnummer].positie);
trace(positie)
}

Dauntless
%Europe/Berlin %383 %2008, 09:12
Je hebt in de music array een hoop strings zitten. Strings zijn statische data; Het zijn geen objecten waar je nog iets in kan opslaan (zoals bv de .positie).

Een mogelijke oplossing is om nog een array aan te maken die de posities bijhoudt:
var positions:Array = new Array(music.length);
Bij het pauzeren sla je de positie dan op in de array:
positions[musicnummer] = positie;
En bij het verder spelen vraag je hem op:
var pos:Number = positions[musicnummer];
if(pos == undefined) pos = 0;

igirly
%Europe/Berlin %463 %2008, 11:07
Hey,

Ik heb als het goed is jou codes goed geplaatst in mijn code. Ik heb het al zover dat hij die positie opslaat waar hij was en dat hij die bij het afspelen weer ingeeft maar hij doet als je op play drukt maar een geluid dat nog halve sec duurt... (volgens mij wel waar ie gebleven was). Bij deze nogmaals mijn code... (er zitten ook al weer wat andere dingen in, zoals volgende afspelen als het nummer voorbij is (wat ook nog niet werkt :p)

Grtz Peter

////////////////// begin config /////////////////////
arraymax = 4; // laatste array nummer ///////////////
///////////////// inde config ///////////////////////

// music Arays aanmaken
var music = new Array();
music[0] = "00_Through_The_Fire_And_Flames.mp3";
music[1] = "01_Prayer_of_the_Refugee.mp3";
music[2] = "02_Dom_Lomp_en_mellow.mp3";
music[3] = "03_New_Soul.mp3";
music[4] = "04_Me_Nikes.mp3";

// text Arays aanmaken
var musictext = new Array();
musictext[0] = "Dragonforce - Through The Fire And Flames";
musictext[1] = "Prayer_of_the_Refugee";
musictext[2] = "Dom_Lomp_en_mellow";
musictext[3] = "New_Soul";
musictext[4] = "Me_Nikes";

var positions:Array = new Array(music.length);
positions[0] = "";

// Als button word ingedrukt
button_next.onRelease = function(){
// musicnummer + 1 (volgende afspelen)
musicnummer += 1;
// chekken of het nummer bestaad
if(musicnummer > arraymax){
musicnummer = 0;
}
// Liedje afspelen
coolTune = new Sound (musicloader);
trace(music[musicnummer]);
trace(musicnummer);
coolTune.loadSound((music[musicnummer]), true);
// nieuwe text
musictext1 = (musictext[musicnummer]);
trace(musictext1);
lengte == (coolTune.duration(music[musicnummer]));
trace(lengte);
// lengte ofzo
}

// Als musicnummer = 0
if(musicnummer == 0){
// Liedje afspelen
coolTune = new Sound (musicloader);
trace(music[musicnummer]);
trace(musicnummer);
coolTune.loadSound((music[musicnummer]), true);
// text
musictext1 = (musictext[musicnummer]);
// lengte ofzo
}

// Pauze acties
button_pauze.onRelease = function(){
positie = (coolTune.position);
positions[musicnummer] = positie;
trace(positie);
coolTune.stop();
}

// Play acties
button_play.onRelease = function(){
//coolTune.start(positie);
//coolTune.loadSound((music[musicnummer]), true);
var pos:Number = positions[musicnummer];
if(pos == undefined) pos = 0;
coolTune.start(pos);
trace(pos);
}


coolTune.onSoundComplete = function() {
// musicnummer + 1 (volgende afspelen)
musicnummer += 1;
// Liedje afspelen
coolTune = new Sound (musicloader);
trace(music[musicnummer]);
trace(musicnummer);
coolTune.loadSound((music[musicnummer]), true);
// nieuwe text
musictext1 = (musictext[musicnummer]);
trace(musictext1);
}