Gamestudio Links
Zorro Links
Newest Posts
Change chart colours
by 7th_zorro. 05/11/24 09:25
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (M_D), 1,430 guests, and 3 spiders.
Key: Admin, Global Mod, Mod
Newest Members
firatv, wandaluciaia, Mega_Rod, EternallyCurious, howardR
19050 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
flieg Gegner! FLIEG! #356333
02/01/11 11:56
02/01/11 11:56
Joined: Feb 2010
Posts: 482
in deinem Kopf
Otter Offline OP
Senior Member
Otter  Offline OP
Senior Member

Joined: Feb 2010
Posts: 482
in deinem Kopf
Hi guys!

Mein heutiges Problem betrifft den flugwinkel von weggesprengten gegnern oder sonstwas.

Das Bild ist denke ich ziehmlich selbsterklärend.
Es gibt nur den x und z winkel zu berücksichtigen.
Die gegner werden durch c_move mit speed_x und speed_z im "absdist"vector durchs level bewegt.
Wie ermittle ich eine linie zwischen gegner und dem zentrum der explosion, die dann den winkel der flugbahn auf speed_x und speed_z überträgt?

Sagt bescheit wenn ihr keine ahnung habt was ich da laber.
OTTER


Be my UBB-Buddy, without any reason!
Re: flieg Gegner! FLIEG! [Re: Otter] #356335
02/01/11 12:23
02/01/11 12:23
Joined: Aug 2002
Posts: 2,183
Germany, BaW�
Rondidon Offline
Expert
Rondidon  Offline
Expert

Joined: Aug 2002
Posts: 2,183
Germany, BaW�
Die Zeichnung ist ja mal wieder cool. Bewundernswert, dass du immer so viel Energie in deine Erklärungen reinsteckst laugh Also:



Zur Erklärung

Erstmal sorry dass ich das mit den Definitionen so verhauen habe. Ich hoffe man kann es trotzdem verstehen. Wenn nicht, einfach sagen.

Delta x = Der X-Vektor des Objektes minus Der X-Vektor der Explosion
Delta z = Der Z-Vektor des Objektes minus Der Z-Vektor der Explosion
Damit hast du schon den Richtungsvektor.

Jetzt fehlt noch die Geschwindigkeit. Das ist Fres. Fres bekommst du mit dem Satz des Pythagoras. (Hypothenuse zum Quadrat gleich Kathethe 1 zum quadrat plus Kathete 2 zum Quadrat).
Edit: Die Endgeschwindigkeit wäre jetzt stärker, je weiter die Explosion entfernt ist. Löse es einfach so.
Explosionsauswirkung = Explisonsstärke - Fres.
Fres darf maximal so groß wie die Explosionsstärke sein, aber das kannst du im Code ja recht einfach umsetzen.


Übertrage das in die c_move Funktion - und fertig. Lustig wären noch Abpraller am Boden danach. Dafür einfach Einfallwinkel = Ausfallwinkel-(Ausfallwinkel*0.5). Oder halt PhysX.


Re: flieg Gegner! FLIEG! [Re: Rondidon] #356347
02/01/11 13:54
02/01/11 13:54
Joined: Aug 2007
Posts: 1,922
Schweiz
Widi Offline
Serious User
Widi  Offline
Serious User

Joined: Aug 2007
Posts: 1,922
Schweiz
vec_diff ( VECTOR* vector, VECTOR* vector1, VECTOR* vector2);

Setzt den vektor auf die Differenz von vector1 und vector2. Nach der Anweisung gibt Vector die Richtung von vector2 zu vector1 an.

Parameter:
vector - Differenz von vector1 und vector2
vector1 - Erster Vektor. Benutzen Sie nullvector, um vector auf das Negativum von vector2 zu setzen.
vector2 - Zweiter Vektor

Das sollte eigentlich reichen wink
@Rondidon: Du hast dir auch Mühe mit deiner Zeichnung gegeben, aber an die Illustration von Otter reicht es leider nicht ganz heran wink

Re: flieg Gegner! FLIEG! [Re: Widi] #356424
02/01/11 21:51
02/01/11 21:51
Joined: Feb 2010
Posts: 482
in deinem Kopf
Otter Offline OP
Senior Member
Otter  Offline OP
Senior Member

Joined: Feb 2010
Posts: 482
in deinem Kopf
der erste vector von vec_diff, also die differenz zwischen 1 und 2 - ist das ergebnis ein abstand oder ein winkel? Ich blick da nicht ganz durch ...

action goomba()
{
...
...
goomba macht goombazeugs ....
...

if(my.manner_of_death == 4) //// manner_of_death = art des todes
{
?????
}
}
wait(1);
}
ent_remove(me);




function goomba_react(){
switch (event_type)
{
case EVENT_SCAN:
if(you.typ == EGG) //// wenn goomba von Eier-explosions-scan erfasst wird
{
my.leben = 0;
my.manner_of_death = 4;
????
}
...
...




Das müsste eigentlich der ganze wichtige code für diese aktion sein oder?


Be my UBB-Buddy, without any reason!
Re: flieg Gegner! FLIEG! [Re: Otter] #356427
02/01/11 23:04
02/01/11 23:04
Joined: Aug 2002
Posts: 2,183
Germany, BaW�
Rondidon Offline
Expert
Rondidon  Offline
Expert

Joined: Aug 2002
Posts: 2,183
Germany, BaW�
Keine Garantie für Fehlerfreiheit, aber eigentlich sollte es so gehen. Getestet habe ich es nicht.

Code:
if(my.manner_of_death == 4) //// manner_of_death = art des todes
{
	var richtungsvektor[3];
	var geschwindigkeit;
	var explosionsstaerke = 200; //maximale Stärke der Explosionsauswirkung. Gleichzeitig Radius der Explosionsauswirkung
	var vektorenabstand = vec_dist(EGG.x,my.x); //Abstand zwischen Gegner (my) und explodierendem Ei (EGG) berechnen
	if(vektorenabstand > explosionsstaerke) { vektorenabstand = explosionsstaerke} //Radius der Explosionseinwirkung beschränken
	
	vec_diff(richtungsvektor,EGG.x,my.x) //Richtungsvektor berechnen durch Differenz zwischen Ei und Gegner
	geschwindigkeit = 0.2*(explosionsstaerke - vektorenabstand); //Auswirkung der Explosion berechnen. Die 0.2 davor ist der Faktor wie stark sich die Explosion auswirken soll. Kannst du ändern.
	vec_scale(richtungsvektor,geschwindigkeit); //Geschwindigkeit in den Richtungsvektor einrechnen
	
	while(c_move(my,NULL,richtungsvektor,IGNORE_PASSABLE)>0) //Während Entity in der Luft ist bzw. kein Hindernis trifft (hier bin ich mir nicht ganz sicher, Musst du mal testen)
	{
		c_move(my,NULL,richtungsvektor,IGNORE_PASSABLE);
		richtungsvektor[2] -= time_step; //Erdgravitation in die Flugbahn einrechnen.
		wait(1);
	}
	
	//Ab hier berührt die Entity den Boden. Jetzt kannst du die Entity z.B. abprallen lassen. Aber probier erstmal das oben aus.
}



Quote:

der erste vector von vec_diff, also die differenz zwischen 1 und 2 - ist das ergebnis ein abstand oder ein winkel? Ich blick da nicht ganz durch ...


Das ist ein Vektor. Pappenheimer erklärt das noch genauer. Schau mal in deinem Mathebuch oder Formelsammlung wenn du das noch /schon hast. In der Oberstufe Gymnasium macht man das ab der 12. soweit ich mich erinnern kann (BaWü)

Re: flieg Gegner! FLIEG! [Re: Otter] #356431
02/01/11 23:17
02/01/11 23:17
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Pappenheimer Offline
Senior Expert
Pappenheimer  Offline
Senior Expert

Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Originally Posted By: Otter
der erste vector von vec_diff, also die differenz zwischen 1 und 2 - ist das ergebnis ein abstand oder ein winkel? Ich blick da nicht ganz durch ...


vec_diff gibt die Richtung an, genau genommen, ist es eine Strecke im Raum, die Strecke zwischen 1 und 2. Das Ergebnis ist also ein Vector mit 3 Werten.

vec_dist (!) gibt den Abstand wieder - das Ergebnis ist ein Wert (nicht 3 wie in einem Vector)


Also:

vec_diff(temp.x, my.x, you.x);//berechnet die Strecke zwischen my und you mit der Blickrichtung zu my
vec_normalize(temp.x, speed);//Setzt die Streckenlänge auf den Wert von "speed"
vec_add(my.x, temp.x);//Addiert die resultierende Strecke zur Position von my hinzu

Re: flieg Gegner! FLIEG! [Re: Pappenheimer] #356758
02/03/11 18:46
02/03/11 18:46
Joined: Feb 2010
Posts: 482
in deinem Kopf
Otter Offline OP
Senior Member
Otter  Offline OP
Senior Member

Joined: Feb 2010
Posts: 482
in deinem Kopf
Tud mir leid, das ich erst jetzt antworte.
Die zeilen machen genau was ich will mit ausnahme der tatsache, dass der gegner auserhalb des scanbereichs sich nicht mehr weiterbewegt und in der luft hängt.
Klar, ich hab den code ja auch in den Scan bereich hineingesetzt

function goomba_react(){
switch (event_type)
{
case EVENT_SCAN:
if(you.typ == EGG) //// wenn goomba von Eier-explosions-scan erfasst wird
{
my.leben = 0;
my.manner_of_death = 4;
vec_diff(temp.x, my.x, you.x);
vec_normalize(temp.x, 20);
vec_add(my.x, temp.x);

}
...
...

wenn ich es beim actor reinschreibe wird er immer wieder wiederholt, und sucht sich anscheinend irgendeinen you-pointer und wechselt mehrmals die richtung im flug.

vec_add(); ist doch dazu da die ausgemessene strecke "abzufahren", oder?
Wenn ich aber die beiden "Mess-Zeilen" vec_diff und vec_normalice nur einmal aufrufen lasse und vec_add in einem loop, sollte es doch funktionieren.
Blöderweise übernimmt vec_add offensichtlich nicht den richtigen temp-wert.
Muss ich einen anderen vector als temp dafür nehmen oder geh ich sowieso in die falsche richtung?

Quote:
Du hast dir auch Mühe mit deiner Zeichnung gegeben, aber an die Illustration von Otter reicht es leider nicht ganz heran

Da bin ich "einsame spitze", nicht war jungs wink

OTTER


Be my UBB-Buddy, without any reason!
Re: flieg Gegner! FLIEG! [Re: Otter] #356760
02/03/11 18:51
02/03/11 18:51
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Deine ersten beiden orangen Code-Zeilen sind schon korrekt, nur musst du diese einmalig bei der Ei-Explosion ausführen und nicht auf my.x addieren (3. Zeile), sondern auf einen Speed-(Skill-)Vektor, dann sieht es viel schicker aus und die Figur bewegt sich auch weiterhin außerhalb des Scan-Radius'.
In deiner jeweiligen Entity-While musst du nun nur noch die Geschwindigkeitswerte reduzieren (und Schwerkraft simulieren).


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: flieg Gegner! FLIEG! [Re: Otter] #356761
02/03/11 18:51
02/03/11 18:51
Joined: Aug 2002
Posts: 2,183
Germany, BaW�
Rondidon Offline
Expert
Rondidon  Offline
Expert

Joined: Aug 2002
Posts: 2,183
Germany, BaW�
Lies mal meinen Programmcode. Den kannst du eigentlich 1:1 übernehmen wenn ich keinen Fehler gemacht habe. Ich hab da auch Gravitation eingebaut (an den zahlen musst du noch ein wenig rumspielen).

Allerdings hab ich den Engine-eigenen Scan-bereich nicht genutzt. Die Reichweite ist mathematisch gelößt. Du musst im Prinzip nur deine "Explosionsstaerke" eintragen (Recihweite in Quants) und das wars. Je weiter weg von der Explosion, desto weniger Einfluss hat es auf deine Gegner.
Kann allerdings sein, dass sich das mit deinem bisherigen System beißt. Einfach mal ausprobieren.

Re: flieg Gegner! FLIEG! [Re: Rondidon] #356799
02/03/11 23:01
02/03/11 23:01
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Pappenheimer Offline
Senior Expert
Pappenheimer  Offline
Senior Expert

Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
Du solltest das Ei besser den Zustand des Goomba ändern lassen und dann das Wegfliegen in den Zustand reinschreiben:

#define state skill1 // ein Skill Deiner Wahl
#define geh_herum 1
#define flieg_weg 2
....

dann in dem Event:

if(you.typ == EGG) // wenn goomba vom Eier-Explosions-Scan erfasst wird
{
my.state = flieg_weg;
vec_set(temp.x, you.x);//kopiere die Position des Eis in den Temp-Vektor
}

...

und in der Hauptfunktion des Goomba.

var speed = 0;//führe eine Variable für die Fluggeschwindigkeit ein

in die while-Schleife der Hauptfunktion:


if(my.state == flieg_weg) //// wenn goomba von Eier-explosions-scan erfasst wird
{
my.leben = 0;
my.manner_of_death = 4;
vec_diff(temp.x, my.x, temp.x);
vec_normalize(temp.x, speed);//statt einer festen Zahl eine Variable, sodass du den Wert im Verlauf des Fluges ändern kannst
vec_add(my.x, temp.x);
{
...

Page 1 of 2 1 2

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1