particel prob.
Übersicht

![]() |
Mathias-KwiatkowskiBetreff: particel prob. |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi, ich habe mir ein kl. particel system programmiert, doch nun hab ich ein problem, die particel fliegen nur von links nach rechts , kla weiss ich woran es liegt, aber ich weiss nich wie ich es ändern kann.
das was ich ausserdem im type stehn habe ist ein winkel. (z.b. 30 grad) so wie is es nun möglich das er automatisch berechnet das wenn, z.b. die maus links is die partikel nach rechts fliegen, und wenn maus rechts is das die nach links fliegen, das gleiche mit oben unten. nun ja der mauswinkel is kla, via atan2 übermittelt. wie kann ich nun aus einem winkel (was eine zahl is ^^ z.b. ein negativ wert machen ect.) ich weiss nich wie ich das problem genauer beschreiben soll. hier der fehler: Code: [AUSKLAPPEN] fX = fX + fXspeed
fY = fY + fYSpeed und hier das ganze wo was errechnet wird / werden sollte Code: [AUSKLAPPEN] Method Move() fX = fX + fXspeed fY = fY + fYSpeed g = g - Rnd(8) If r = 0 Then r = 0 If g = 0 Then g = 0 S = S + 1 If S > 16 Then S = 16 erm:Int = fX - StartX If erm > 70 Then blend = blend - 0.01 End Method |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sin![]() ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
jop daran habe ich auch gedacht, aber das will auch nich so wirklich, also das wiederrum liegt warscheinlich nur dran das ich es nich weiss richtig einzusetzen.
Code: [AUSKLAPPEN] fX = fX + fXspeed * Cos(w)
fY = fY + fYSpeed * Sin(w) damit habe ich allerdings noch immer kein positiven oder negativen wert wenn du weisst was ich mein, da ich den wer schliesslich angebe. ( fx + ) * sowieso |
||
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich, das was du geschrieben hast, richtig verstehe, lautet meine Antwort so:
Hast du den Code getestet? Sinus und Kosinus liefern Werte zwischen -1 und 1 (beide inklusive). D.h. du hast positive und negative Faktoren drinnen, je nachdem, wie der Winkel ist. mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja getestet, naja es funktioniert nich so wie es soll, und egal ob cos oder sin, mit beiden haut es nich wirklich so hin wie ich es brauch.
Code: [AUSKLAPPEN] Global pGrav:Float = 0.05
Global particleslist:TList = CreateList() Type TParticles Field StartX:Float, StartY:Float Field fAngle, iDuration, iStart, fX:Float, fY:Float Field fGrav:Float, fSpeed, fXspeed:Float, fYSpeed:Float Field r:Int, g:Int, b:Int Field S:Int Field blend:Float Field w:Int Function Create:TParticles(x, y) Local Particles:TParticles = New TParticles Particles.fAngle = Rand(-15, 15) Particles.iDuration = Rand(4000, 6000) Particles.iStart = MilliSecs() Particles.fGrav = pGrav Particles.fX = x Particles.fY = y Particles.r = 255 Particles.g = 255 Particles.b = 0 Particles.S = 5 Particles.Blend = 0.4 Particles.fSpeed = Rnd(2) Particles.StartX = x Particles.StartY = y If Particles.fSpeed < 1 Then Particles.fSpeed = 1 Particles.fXspeed = Particles.fSpeed * Cos(Particles.fAngle) Particles.fYSpeed = Particles.fSpeed * Sin(Particles.fAngle) Return Particles EndFunction Method Move() 'fYSpeed = fYSpeed + fGrav If cos (w) < 0 Then fX = fX - fXspeed fY = fY - fYSpeed If Cos(w) > 0 Then fX = fX + fXspeed fY = fY - fYSpeed 'fX = fX + fXspeed 'fY = fY + fYSpeed 'r = r - 1 g = g - Rnd(8) If r = 0 Then r = 0 If g = 0 Then g = 0 S = S + 1 If S > 16 Then S = 16 erm:Int = fX - StartX If erm > 70 Then Blend = Blend - 0.01 If erm < - 70 Then Blend = Blend - 0.01 erm:Int = fY - StartY If erm > 70 Then Blend = Blend - 0.01 If erm < - 70 Then Blend = Blend - 0.01 End Method EndType |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Darf ich mal fragen was du damit bezwecken wolltest :
Code: [AUSKLAPPEN] If cos (w) < 0 Then fX = fX - fXspeed fY = fY - fYSpeed
If Cos(w) > 0 Then fX = fX + fXspeed fY = fY - fYSpeed Speicher am besten Sin(w) und Cos(w) in fYSpeed und fXSpeed beim erstellen, und dann einfach wie du es geschrieben hast : Code: [AUSKLAPPEN] fX = fX + fXspeed
fY = fY + fYSpeed (Btw: Sin ist für die YAchse und Cos für die XAchse da... ist in deinem fall wichtig !) mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
das weiss ich ich habe es zuvor auch so probiert:
Code: [AUSKLAPPEN] If Cos (w) < 0 Then fX = fX - fXspeed
If Sin (w) < 0 Then fY = fY - fYSpeed If Cos (w) > 0 Then fX = fX + fXspeed If Sin (w) > 0 Then fY = fY + fYSpeed dann gehts zwar der (rauch nach link) , mehr schlecht als recht, aber oben und unten nix, und nach rechts einwandfrei |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
ToeB hat Folgendes geschrieben: Speicher am besten Sin(w) und Cos(w) in fYSpeed und fXSpeed beim erstellen [...] Das macht sich nicht gut, wenn man Abpraller/Richtungsänderung bei gleicher Geschwindigkeit verwenden möchte.
Mathias-Kwiatkowski hat Folgendes geschrieben: [...] ich es nich weiss richtig einzusetzen. Man beachte meine Signatur oder informiere sich aus beliebiger Quelle über Sin&Cos. Mit Trigonometrie und/oder Vektoren sollte man sich etwas auskennen, wenn man programmiert.
|
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Hangman |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So ganz verstehe ich nicht was du meinst...
Vielleicht helfen dir aber folgende Funktionen, kannst ja selbst gucken ob es das ist was du suchst. Code: [AUSKLAPPEN] 'Ermittelt den Winkel um ein Objekt A in Richtung B auszurichten
Function Richtung:Int(AusgangspunktX:Int, AusgangspunktY:Int, ZielpunktX:Int, ZielpunktY:Int) Local grad:Float grad = ATan2(ZielpunktY-AusgangspunktY, ZielpunktX-AusgangspunktX)-180 If grad<0 Then grad:+360 Return Int(grad) End Function Um das Objekt nun zu bewegen mit Berücksichtigung des ermittelten Winkels: Code: [AUSKLAPPEN] Y :+ Sin(Winkel) * wählbarer speed falls gewünscht
X :+ Cos(Winkel) * "" |
||
Ich habe Berthold gebrochen. |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
jo, habe es hinbekomm, nur leider leidet die FPS total drunter, wenn man z.b. "die partikel als raketen rauch" nutzt, und 20 raketen abschiesst, hat man ne fps von naja 45 oder so.
das is mies. |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde ja auch den Winkel beim erstellen speichern und zusätzlich dann den Sin/COs wert.
Code: [AUSKLAPPEN] Function Create:int( x:float, y:float, winkel:float )
pat.x = x pat.y = y pat.speed = 3 pat.winkel = winkel pat.XSpeed = Cos( pat.winkel ) * pat.speed pat.YSpeed = Sin( pat.winkel ) * pat.speed End Function Und falls sich der Winkel ändern sollte, einfach wieder XSpeed und YSpeed neu berechnen... und zwar nur dann. mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group