Volledige versie bekijken : objecten via random verschillende snelheid/richting geven
Roman
%Europe/Berlin %710 %2005, 18:02
hey flashers,
ik ben bezig een soort filmpje te maken waar objecten met verschillende snelheid, grootte, en richting vliegen. ik ben heel erg beginner, en het lukt niet.
ik heb al het volgende script geschreven. het script staat in een MC:
onClipEvent(enterframe){
var varsnelheid = random(10) + 10 ;
var varrichting = random(4);
if (varrichting = 1) {
this._x -= varsnelheid;
}
if (varrichting = 2) {
this._x += varsnelheid;
}
if (varrichting = 3) {
this._y -= varsnelheid;
}
if (varrichting = 4) {
this._y += varsnelheid;
}
}
wat is hier niet goed? as geeft zelf geen foutmelding
hopelijk kunnen jullie me helpen,
groet, Roman
Flasher
%Europe/Berlin %718 %2005, 18:14
bij vergelijkingen, zoals if(varrichting ==1) moet je een dubbel is-gelijkteken gebruiken
Mediamonkey
%Europe/Berlin %728 %2005, 18:28
Bedoel je zoiets?
onClipEvent(load) {
this.tempo = 3;
this.afzwakking = 0.9;
this.snelheidX = 0;
this.snelheidY = 0;
}
onClipEvent(enterFrame) {
this.snelheidX += Math.random()*this.tempo-(this.tempo/2);
this.snelheidY += Math.random()*this.tempo-(this.tempo/2);
this.snelheidX *= this.afzwakking;
this.snelheidY *= this.afzwakking;
this._x += this.snelheidX;
this._y += this.snelheidY;
if (this._x < 0 || this._x > 500) this.snelheidX *= -1;
if (this._y < 0 || this._y > 400) this.snelheidY *= -1;
}
Het is overigens makkelijker om je script op de root neer te zetten, op deze manier kun je dan het bovenstaande script programmeren:
tempo = 3;
afzwakking = 0.9;
snelheidX = 0;
snelheidY = 0;
onEnterFrame = function() {
snelheidX += Math.random()*tempo-(tempo/2);
snelheidY += Math.random()*tempo-(tempo/2);
snelheidX *= afzwakking;
snelheidY *= afzwakking;
mc._x += snelheidX;
mc._y += snelheidY;
if (mc._x < 0 || mc._x > 500) snelheidX *= -1;
if (mc._y < 0 || mc._y > 400) snelheidY *= -1;
}
Hierbij is 'mc' dan jouw movieclip die je wilt laten bewegen. Dat is zijn instancename.
succes ermee!
Roman
%Europe/Berlin %741 %2005, 18:48
ooh bedankt voor de tip van == :)
alleen nu doet ie het ook niet goed: elke halve seconde ofzo repeat ie het script en gaat ie een andere kant op met een andere snelheid:S hoe verlhelp ik dit? :S
oke bedankt voor de reacties,
Roman
Roman
%Europe/Berlin %742 %2005, 18:48
sorry voor de vage berichtjes :P
Roman
%Europe/Berlin %830 %2005, 20:55
bedankt voor die reactie met dat hele script alleen snap ik het script niet en ik wil wel iets maken wat ik snap...
maar hoe kan ik zorgen dat het bovenstaande script maar 1 keer wordt uitgevoerd?? want hij doet het steeds opnieuw waardoor de MC vage, schokkende bewegingen alle kanten op maakt.
bedankt,
Roman
Fatty Owl
%Europe/Berlin %840 %2005, 21:09
haal de onEnterFrame weg zeker?
edit :sorry je hebt het niet op een frame staan
Roman
%Europe/Berlin %856 %2005, 21:32
jah idd, hij staat in de movieclip zelf.
ik kan het script proberen aan te passen zodat hij in de root staat, probeer ik morge ff
iK wil het scrip uiteindelijk zo krijgen dat er objecten met verschillende grootte, snelheid en richting door de lucht vliegen
nog een andere tip voor het script??
bedankt,
Roman
SaphuA
%Europe/Berlin %911 %2005, 22:52
Wat je met je huidige code doet, is de snelheid en de richting elk frame te veranderen, wat dus lijd tot een MC dat als een idioot door het beeld schokt.
Je moet dus zorgen dat de MC dus niet steeds van richting veranderd.
onClipEvent(load){
var varsnelheid = random(10) + 10 ;
var varrichting = random(4);
var vartimer = 20+random(20);
}
onClipEvent(enterframe){
if (varrichting = 1) {
this._x -= varsnelheid;
} else if (varrichting = 2) {
this._x += varsnelheid;
} else if (varrichting = 3) {
this._y -= varsnelheid;
} else if (varrichting = 4) {
this._y += varsnelheid;
}
if(--vartimer == 0){
varsnelheid = random(10) + 10 ;
varrichting = random(4);
vartimer = 20+random(20);
}
}
Roman
%Europe/Berlin %641 %2005, 16:23
huh maar nu veranderd die toch ook om de zoveel tijd van richting of heb ik het mis...
Burgwal39
%Europe/Berlin %661 %2005, 16:52
volgens mij moet het goed gaan als je dubbele == gebruikt in je if vergelijking en als je van random(4) --> random(5) maakt. een dubbele == staat namelijk voor "is gelijk aan" in een vergelijking
gbolssens
%Europe/Berlin %804 %2005, 20:18
huh maar nu veranderd die toch ook om de zoveel tijd van richting of heb ik het mis...
helemaal niet; alleen als vartimer ==1 (of --vartimer == 0, dat komt in dit geval op hetzelfde neer).
"--vartimer==0" wil zeggen dat je de variabele vartimer eerst met 1 vermindert en daarna pas gaat kijken of die nieuwe waarde gelijk is aan 0. In vele gevallen is het beter om te zeggen "--vartimer <= 0" omdat je soms met afrondingsfouten zit, en dan kan het voorvallen dat je variabele, waarvan je dacht dat het een geheel getal was, nooit exact 0 wordt. Bvb. 0,00001 en dat is niet gelijk aan 0. Als je er dan 1 vanaf trekt is het -0,99999 en dat is weer niet gelijk aan 0 en zo kom je in een eindeloze lus terecht. Met "<=0" ondervang je dit.
Code van Saphua kan ook iets eleganter; met een switch-case-break clause.
Werkt altijd net iets overzichtelijker dan if-elseif-elseif-elseif-elseif-elseif-elseif-.... vind ik (maar werkt precies hetzelfde, hoor):
onClipEvent(enterFrame)// is met hoofdletter 'F', b.t.w.
{
switch (varrichting)
{
case 1:
this._x -= varsnelheid;
break;
case 2:
this._x += varsnelheid;
break;
case 3:
this._y -= varsnelheid;
break;
case 4:
this._y += varsnelheid;
break;
}
}
greetz,
GB
mateo)
%Europe/Berlin %825 %2005, 20:49
bij dat laatste berichtje van saphua
if (varrichting = 1) {
moet natuurlijk zijn
if (varrichting == 1) {
SaphuA
%Europe/Berlin %506 %2005, 13:09
Hehe thnx mateo :) Ik had de code van het eerste post gewoon gekopierd zonder erbij na te denken... Het wordt dus:
onClipEvent(load){
var varsnelheid = random(10) + 10 ;
var varrichting = random(4);
var vartimer = 20+random(20);
}
onClipEvent(enterframe){
if (varrichting == 1) {
this._x -= varsnelheid;
} else if (varrichting == 2) {
this._x += varsnelheid;
} else if (varrichting == 3) {
this._y -= varsnelheid;
} else if (varrichting == 4) {
this._y += varsnelheid;
}
if(--vartimer == 0){
varsnelheid = random(10)+10 ;
varrichting = random(4);
vartimer = 20+random(20);
}
}
Dacht dat je het wel zou snappen, maar zal het even uitleggen. Het belangrijkste zijn eigenlijk de 3 variables:
varsnelheid -> De snelheid van de MC (random(10)+10) met een min. en max. van: 10 t/m 19
varrichting -> De richting van de MC, kunnen 4 waardes uitkomen voor de richting, vrij logisch
vartimer -> De tijd tussen het veranderen van richting en snelheid (20+random(20)) met en min. en max. van 20 t/m 39 De tijd is op het moment vrij kort, met een fps van 12 veranderd ie ongeveer elke 2 seconden van richting en snelheid. Dus als dat langer moet duren moet je dit natuulijk even aanpassen.
Als je wilt dat sommige variables statisch blijven (bijv. de snelheid), moet je dit na de lijn: if(--vartimer == 0){ even weghalen zodat deze alleen een waarde krigjt bij de onLoad.
Greetz
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.