Objektposition verschieben
Übersicht

![]() |
JamaginBetreff: Objektposition verschieben |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe nun das mit den Waypoints verstanden und nun tut sich mal wieder ein Denkfehler auf.
Folgende Situation: Ich habe zB. 7 Waypoints gesetzt (alles DIM-Felder) und eine Typekollektion für die Objekte. Die Waypoints werden von 0 hochgezählt und die Typeliste auch, jedoch ist es nun so, daß ... Obj5.Obj4..Obj3...Obj2...Obj1..Obj0 wp0...wp1...wp2...wp3...wp4...wp5...wp6...wp7 Wie ich bei Collision drauf reagiere hab ich auch schon, das Problem ist aber das bei Collision mit Obj1 dieses vor das Obj0 gesetzt wird, obwohl ich eine For-Schleife habe die mir die Objekte vom Kollidierten bis zum ersten Eintrag (Obj0) ausliest. Diese sollen dann jeweils um einen Waypoint weiter versetzt werden. Code: [AUSKLAPPEN] Else ; check collision with enemy For enemy.TEnemy = Each TEnemy collisionDistance# = (enemy\radius + player\radius) vx# = (player\x - enemy\x) vy# = (player\y - enemy\y) actualDistance# = Sqr(vx * vx + vy * vy) If actualDistance < collisionDistance player\sy = 0 collNormalAngle# = ATan2(vy, vx) nX# = Cos(collNormalAngle) nY# = Sin(collNormalAngle) moveDist# = (collisionDistance - actualDistance) player\x = player\x + moveDist * nX player\y = player\y + moveDist * nY For i = 1 To enemy\nummer enemy\current_path = enemy\current_path+1 enemy\x = pathx(enemy\current_path) enemy\y = pathy(enemy\current_path) Next EndIf Next EndIf Kann da wer weiterhelfen bitte? lg. Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was ist enemy\nummer? Was sollte pathx/y bewirken?
Kreiskollision ist klar, aber was du danach machst, verstehe ich nicht mehr. |
||
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) |
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Xeres,
pathx(enemy\nummer) ist der waypoint sowie pathy(...) Ich habe die waypoints mit DIM dimensioniert. enemy.TEnemy ist die Typekollektion. Was mach ich in dieser Funktion: Ich prüfe die Kollision zwischen den emporgeschossenen Ball und der Typekollektion. Ist eine Kollision dann sollten sich die Objekte zum nächsten waypoint bewegen. Beispiel: X-----X----X----X----X wp1.wp2.wp3.wp4.wp5 X-X-X-O-X-X X ist die Typekollektion und O ist der emporgeschossene Ball. (siehe Grafik im Eintrag Waypoints von mir. das letzte X (ganz rechts) ist der erste Eintrag in der Typekollektion und wp ist der waypoint, die nummer hinter wp ist das dimfeld praktisch. In der For-Schleife setze ich die nächste Position des Enemywaypoints und da hab ich das Problem wie vorher definiert! lg. Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann an mir liegen, aber das erklärt nichts.
Warum sind die Waypoints keine Types? Warum setzt du die Kugeln direkt auf den nächsten Waypoint? Warum änderst du was am Player-Objekt (Kugel?) nach der Kollision? Warum wird da stattdessen keine neue TEnemy-Kugel erzeugt oder eingetragen? Bist du sicher, dass da kein Exit ![]() Was du tun willst ist mir ziemlich klar, die frage ist, was du tatsächlich tust. Wie du vor hast, die Bälle neu zu ordnen, verstehe ich jedenfalls nicht. |
||
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) |
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Xeres,
danke für deine Antwort! Ich müßte den ganzen Code reinstellen damit du siehst was ich mache! Ich versuche es aber nochmals dies zu erklären. Ich ändere nichts am Player Objekt, das wird ja dann sowieso gelöscht und an der Kollisionsstelle ein neues TEnemy Objekt erzeugt. Aber das erst, wenn sich die TEnemy Objekte einen Waypoint weiter verschoben haben und da happert es leider! Es funktioniert soweit aber das zweite X wird in diesem Fall vor das erste versetzt. Das ist falsch, denn es sollte das 1. X (das rechteste) um eine Stelle weiter verschoben werden und dann das nächste. Eben bis dorthin welche Objektnummer aus der Kollisionsprüfung herauskommt. Wenn der Ball das vorletzte X trifft, sollten diese 2 eine Stelle nach rechts gehen. Sollte es echt nur am Exit liegen? Warum sollte ich die Waypoints in ein Typefeld tun? Wäre das besser? Ist nicht DIM schneller? Auch habe ich gelesen, daß SQR ein langsamer Befehl ist und es besser wäre Code: [AUSKLAPPEN] acutalDistance = (vx * vx + vy * vy) oder ... = vx^2 + vy^2 (ist das schneller?) IF acutalDistance > (Radius * Radius) ... Vielleicht muß ich die Waypoints andersrum setzen, dann würde es klappen. Also von rechts nach links? Sodaß praktisch Waypoint 0 auch enemy\enemy_path = 0, waypoint 1 ... enemy\enemy_path = 1 etc. ist? Sollte ich echt mal versuchen! lg. Jamagin NB: Habe ja auf den Thread hingewiesen wo ich die 2 Bilder drinnen habe bzgl. Waypoints und du hast dort ein Bild Spielfeld (Zuma) eingefügt! |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was die Frage nach der Geschwindigkeit angeht: Optimiere erst wenn Du wirklich performanceprobleme hast. Bei den paar Kugeln sollte es absolut egal sein ob Du sqr nimmst oder nicht. Wenn nein ist es eine Sache von Minuten den Code passend zu ändern.
Ebenso würde ich immer den zur Anwendung passenden Container nehmen. Die Liste ist hier deutlich sinnvoller als ein Array, weil man recht schmerzfrei Objekte einfügen und entfernen kann. Nur wenn die Performance massiv leiden sollte würde ich auf das inflexiblere (zumindest im Bezug aufs einfügen von Elementen) Dim-Modell zugreifen. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jamagin hat Folgendes geschrieben: Ich ändere nichts am Player Objekt
Dann ist dies alles... Code: [AUSKLAPPEN] player\sy = 0
unnötig oder zumindest am falschen Platz.
collNormalAngle# = ATan2(vy, vx) nX# = Cos(collNormalAngle) nY# = Sin(collNormalAngle) moveDist# = (collisionDistance - actualDistance) player\x = player\x + moveDist * nX player\y = player\y + moveDist * nY Die Kollision findet statt, d.h. du solltest einen neues TEnemy-Object erstellen, mit insert ![]() Die Waypoints sollten gar nichts damit zu schaffen haben, die richtigen Abstände können die Kugeln selbst erreichen. Zwischen zwei Waypoints sollte eine beliebig lange Strecke liegen, weshalb ich auch nicht einsehe, warum du die Kugeln ganze Waypoints weiter schickst. Types sind immer wenn möglich vor zu ziehen. Code: [AUSKLAPPEN] enemy\wp = enemy\wp\NextWP ;Nächsten Ziel Waypoint auswählen
Wenn du auf irgendwas Hinweisen möchtest, linke selbst zu deinen Topics und zu passenden Beispielbildern. Du willst die Hilfe, dass ist deine Aufgabe. Lass Niemanden für dich was suchen, wenn du das selbst tun könntest. |
||
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) |
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Xeres!
Ups, sorry! Ja ich werde mich in Zukunft bemühen, daß auch die Hilfehinweise verlinkt sind! Ich wußte nicht klingt blöde, ich hab einfach nicht daran gedacht! Werde mir deine Zeilen genau ansehen um zu verstehen wie du das meintest! Danke mal vorweg! ![]() lg. Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group