PDA

Volledige versie bekijken : game


zynex_18
%Europe/Berlin %471 %2005, 12:19
In mijn game heb ik een canon gezet, dat heel de tijd op de hero van de game blijft schieten. Nu heb ik een script nodig, dat zegt: als de hero in een straal van 200 van het canon is, dan pas begint hij met schieten.
met scripts zoals:

if(_root.hero._x>=this._x+200

daar lukt het niet mee. want dat script geld alleen als je hem van voren benaderd. Het moet egt in een STRAAL van 200 zijn.

Weet iemand een script hiervoor?

BlijBlauw
%Europe/Berlin %474 %2005, 12:23
je zou het met hitTest kunnen doen. Dat je een cirkel maakt om je canon en dan testen met hitTest of je hero die cirkel raakt.

Je kan het ook helemaal gaan uitrekenen met AS, maar denk dat je hier hetzelfde mee bereikt, op een makkelijkere manier

Roenes
%Europe/Berlin %474 %2005, 12:23
if(_root.hero._x >= this._x - 200 && _root.hero._x <= this._x + 200){}Dit zou het volgens mij moeten doen :)

Laiverd
%Europe/Berlin %474 %2005, 12:23
Waarom trek je niet gewoon een circle om dat kanon, en doe je het met hitTest(); lijkt me een stuk eenvoudiger.
Lekker trouwens dat je als hero de hele tijd beschoten wordt ;)

John

BlijBlauw
%Europe/Berlin %476 %2005, 12:26
if(_root.hero._x >= this._x - 200 && _root.hero._x <= this._x + 200){}Dit zou het volgens mij moeten doen :)

dan heb je nog geen straal ;)

Leuk idee Laiverd ;)

Laiverd
%Europe/Berlin %483 %2005, 12:36
Dabbedoelik ;)

peres
%Europe/Berlin %532 %2005, 13:46
ik heb er eens over nagedacht:

Zou het niet kunnen met pythagoras?
http://members.lycos.nl/ukay/pythagoras.JPG
A² = B² + C²


http://members.lycos.nl/ukay/pythagoras2.jpg
Misschien dat je dan zo uit kan rekenen hoe ver de speler van het kanon af staat?

maar ik zou niet weten hoe je dit in AS opschrijft :(

Roenes
%Europe/Berlin %537 %2005, 13:53
dan heb je nog geen straal ;)Shit, verkeerd gelezen. Ik dacht dat het alleen horizontaal moest. :p

Maar idd, het circle idee zou een oplossing zijn. En Peres, met Pytagoras is het idd ook wel te doen, maar komt er meer scripting bij kijken. :)

peres
%Europe/Berlin %546 %2005, 14:06
met Pytagoras is het idd ook wel te doen, maar komt er meer scripting bij kijken.
nou ben ik ook benieuwd ook naar het script :D


is er een wortel- en kwadraatfunctie in flash?

want dan kun je em misschien op zo'n manier opschrijven (natuurlijk niet met die tekens):

if( 200 >= √((speler._x - kanon._x)² + (kanon._y - speler._y)²)

Roenes
%Europe/Berlin %551 %2005, 14:14
is er een wortel- en kwadraatfunctie in flash?Jepz,
- Wortel: Math.sqrt();
- Macht: Math.pow();

Dus zet je scriptje maar om naar flash AS ;)

Pimm
%Europe/Berlin %554 %2005, 14:17
Jepz,
- Wortel: Math.sqrt();
- Macht: Math.pow();

Dus zet je scriptje maar om naar flash AS ;)Kwadraat kan natuurlijk makkelijker:nummer = nummer*nummer;:)

peres
%Europe/Berlin %555 %2005, 14:19
zo toch? :D

if( 200 >= Math.sqrt(Math.pow(speler._x - kanon._x); + Math.pow(kanon._y - speler._y););)

in AS zonder smileys:
if( 200 >= Math.sqrt(Math.pow(speler._x - kanon._x); + Math.pow(kanon._y - speler._y););)

Roenes
%Europe/Berlin %560 %2005, 14:27
Math.pow heeft 2 parameters: het grondgetal en de exponent. Dus eerst geef je aan welk getal je wil machtsverheffen en daarna geef je de macht aan:
trace(Math.pow(3, 2)); //Output 9Dus Peres, jou stukje code werkt dus nog nie ;)

En Pimm, x * x == Math.pow(x, 2) maar x * x vergt wat meer onderhoud mocht je bv besluiten om x tot de 3e te verheffen. Je moet dan meer aanpassen. Of stel je noemt x ineens anders. Je moet dan iedere x aanpassen. Is wat meer werk en daarom is het makkelijker om Math.pow te gebruiken in dat opzicht.

Maar beide berekeningen doen hetzelfde :)

peres
%Europe/Berlin %573 %2005, 14:45
zo? :)

if( 200 >= Math.sqrt(Math.pow(speler._x - kanon._x, 2); + Math.pow(kanon._y - speler._y, 2););)

Roenes
%Europe/Berlin %605 %2005, 15:31
zo? :) Bijna, ; weg ;)
[as]if( 200 >= Math.sqrt(Math.pow(speler._x - kanon._x, 2) + Math.pow(kanon._y - speler._y, 2))){}Als je ; laat staan, dan ziet flash dat als het einde van een regel en zou je rare foutmeldingen moeten krijgen :)

peres
%Europe/Berlin %894 %2005, 22:28
oh ja sorry, foutje :)

ik heb er een filetje van gemaakt, misschien heeft iemand er ooit nog wat aan:

.html (http://invision2.cjb.cc/pythagoras2.html)

.fla (http://invision2.cjb.cc/pythagoras2.fla)

het werkt met de pythagoras-functie.

[^]

Roenes
%Europe/Berlin %997 %2005, 00:55
Nice! Maar 2 dingen:

- maak van onEnterFrame eens this.onMouseMove
- zet als laatste regel code in de (nieuwe) onMouseMove eens dit regeltje: updateAfterEvent();

Kijk hoeveel soepeler hij ineens loopt ;)

ninetynine
%Europe/Berlin %000 %2005, 01:00
wow roenes, idd zeer spectaculair beter :),
toch wel leuk om te weten dat er nog mensen
online zitten om je te helpen om 1 u 's nachts :D

Roenes
%Europe/Berlin %004 %2005, 01:06
wow roenes, idd zeer spectaculair beter :),
toch wel leuk om te weten dat er nog mensen
online zitten om je te helpen om 1 u 's nachts :DSoms nog wel later hoor. En als het een beetje druk is en ik ga bv om half 2 pitten, dan moet ik sochtends om 12 uur ik weet niet hoeveel nieuwe posts lezen ;)

Maarjah, zo een mooie tijd om te gaan pitten :p

SaphuA
%Europe/Berlin %030 %2005, 01:43
difX = canon._x-hero._x;
difY = canon._y-hero._y;
dist = Math.sqrt((difX*difX)+(difY*difY));
Minder CPU intensief ;)

Roenes
%Europe/Berlin %435 %2005, 11:27
En waarom is dat minder cpu intensief? Omdat je geen Math.pow gebruikt of omdat je iedere stap afzonderlijk opslaat? Dat laatste lijkt me trouwens intensiever. Maar waar zit het verschil dan in? :)

peres
%Europe/Berlin %468 %2005, 12:15
Nice! Maar 2 dingen:

- maak van onEnterFrame eens this.onMouseMove
- zet als laatste regel code in de (nieuwe) onMouseMove eens dit regeltje: updateAfterEvent();

Kijk hoeveel soepeler hij ineens loopt ;)

ik heb em even aangepast. Hij is idd soepeler! :D
Waarom is dat eigenlijk? da onMouseMove soepeler is dan onEnterFrame [?]

Roenes
%Europe/Berlin %473 %2005, 12:22
Waarom is dat eigenlijk? da onMouseMove soepeler is dan onEnterFrame [?]onEnterFrame is afhankelijk van je FPS. Als deze op 12 staat, wordt er 12 keer per seconde de muispositie opgevraagd. Maar je muis beweegt veel meer en daardoor gaat het haperig. Maar als je alleen onEnterFrame veranderd in onMouseMove zie je niet veel verschil omdat in de onMouseMove wel bewerkingen worden uitgevoerd, maar de verandering wordt ook maar ieder frame getoond en is dus nogsteeds afhankelijk van je FPS.

Daarvoor komt die updateAfterEvent() die ververst het scherm tussen de frames in. Dus zodra de muis beweegt, ververst het scherm. Daarom loopt deze combinatie zoveel soepeler. Haal de updateAfterEvent maar eens weg in de onMouseMove en zie het verschil :D

peres
%Europe/Berlin %482 %2005, 12:34
oh okey, weer wat geleerd :D

maar het heeft dus niks met de CPU-intesiviteit te maken? want onEnterFrame schijnt heel erg intensief te zijn, dat heb ik wel gemerkt in mijn spelletje.

SaphuA
%Europe/Berlin %495 %2005, 12:52
Goshie Jeroen wat ben je toch een slim mannetje ;)

Voor het snelheid verschil:

var a = 7;
var b = 12;
for (var j = 0; j<4; j++) {
var c;
var d = getTimer();
for (var i = 0; i<10000; i++) {
c = Math.sqrt(a*a+b*b);
}
trace(getTimer()-d);
}
trace("---------------------------");
for (var j = 0; j<4; j++) {
var c;
var d = getTimer();
for (var i = 0; i<10000; i++) {
c = Math.sqrt(Math.pow(a, 2)+Math.pow(b, 2));
}
trace(getTimer()-d);
}

Dit komt omdat Flash eerst de ingevulde waardes moet controleren, daarna in een of andere class de functie pow moet zoeken, in deze functie zitten ook nog enkele checks, en daarna moet ie ook nog eens de waarde retourneren, wat allemaal extra tijd kost. Volgens deze test is mijn manier ongeveer 1.5x sneller :) Maar als je niet op snelheid doelt kun je net zo goed Math.pow gebruiken, maar ik vind het er persoonlijk ook nog eens lelijk uit zien :D

Roenes
%Europe/Berlin %508 %2005, 13:11
Volgens deze test is mijn manier ongeveer 1.5x sneller :)Damn! Ik wist niet dat zo'n extra methodeaanroep voor zoveel vertraging zorgde. :)

maar het heeft dus niks met de CPU-intesiviteit te maken? want onEnterFrame schijnt heel erg intensief te zijn, dat heb ik wel gemerkt in mijn spelletje.In dit geval niet want je onEnterFrame is niet zo heel zwaar. Je kunt al degelijk verschil zien met je originele code als je de fps op 100 zet. Dus hier heeft het niet te maken met CPU intensiviteit :)