Was kann ich bei diesem Code besser machen ? [Gelöst]
Übersicht

Ronon_DexBetreff: Was kann ich bei diesem Code besser machen ? [Gelöst] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, Ich bin es mal wieder.
Ich wollte euch mal fragen wie ich bei dem nachfolgendem Code Verbessern kann, dass mein Spieler beim hinunter gehen von Bergen/Erhöhungen nicht ruckelt. Er ist etwas Improvisiert da ich zb von LinePick nichts verstehe. Die Abfrage: BlitzBasic: [AUSKLAPPEN] If EntityCollided(player,type_scene) Die Funktion: BlitzBasic: [AUSKLAPPEN] Function Differenz(grund,spieler) p.s: der Rest des Codes auf Anfrage mfg Ronon |
||
- Zuletzt bearbeitet von Ronon_Dex am So, Dez 18, 2011 17:11, insgesamt einmal bearbeitet
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was hältst du von ein bisschen realistischer Physik?
Ich erkläre es ja gerne, aber das habe ich schon vor ein paar Wochen gemacht: https://www.blitzforum.de/foru...hp?t=37981 Zu LinePick ![]() Die Dokumentation recht übersichtlich. Außerdem verwendet LinePick Vektoren statt Winkeln, was auch einiges einfacher machen sollte. Beispiel: Wie sucht man mit LinePick nach unter dem Spieler liegenden Objekten? BlitzBasic: [AUSKLAPPEN] LinePick playerX, playerY, playerZ, 0, -1, 0 Mit anderen Worten: Starte die Suche nach Objekten bei playerX/Y/Z. Erhöhe nach jeder Kontrolle den X-Wert um 0, den Y-Wert um -1 und den Z-Wert um 0. Wo ist hier das Problem? ZEVS |
||
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Okey wenn du das so schreibst wirkt es plötzlich so einfach ![]() Aber wie frage ich das dann ab ? Und ruckelt es dann beim Bergab laufen nicht genauso weil ich ja trotzdem TranslateEntity benutzen muss @Deine Erklärung Was ist wenn man auf einem Entity steht ? |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Ruckeln hat in der Tat andere Ursachen. Das kann mit den Meshes zusammenhängen, aber auch an den Collisions![]() ZEVS |
||
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem bei TerrainY und PlayerY ist das die beiden (auser auf einer Ebenen Fläche) niemals den Gleichen abstand haben bzw gleich sind | ||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Ruckeln könnte davon kommen, dass bei jeder Berühung zu viel addiert wird und dadurch sich beides nun zu weit entfernt, was nun wiederum dazu führt, dass sie viel zu weit auseinander geraten, wass wiederum dazu führt, dass sie sich annähern.
Vielleicht wäre ein sinnvoller Weg, wenn man bei sehr kleinen Distanzen nur noch ganz wenig korrigiert, die Veränderung (Addy) also abhängig von de Distanz macht: Also z.b. immer 1/2 der Distanz überbrückt. So dauert es mehrere FLIPs bis der richtige Abstand erreicht ist, was viel harmonischer wirkt. Und da ja während dieser FLIPs der Abstand immer noch kleiner wird wird auch das 1/2 daraus immer noch feiner. Beispiel festes Addy: Ausgangssituation: Boden bei 9.5 Spieler bei 9.6, AddY bei +/- 0.1 das ergibt folgende SpielerY: 9.6 also -0.1 =9.5 aber Kollision! also danach 9.5 + 0.1 -> SpielerY= 9.6 dann wieder 9.6 - 0.1 -> SpielerY= 9.5 aber Kollision Folge: Figur scheint zu hüpfen oder ruckel. Beispiel für 1/2 Distanz-AddY: Ausgangssituation: Boden bei 9.5 Spieler bei 9.6, AddY bei +/- 1/2-Distanz das ergibt folgende SpielerY: 9.6 also D=-0.1 Addy=0.05 -> SpielerY=9.55 9.55 also D=-0.05 Addy=0.025 -> SpielerY= 9.525 9.525 also D=-0.025 Addy=0.012 -> SpielerY= 9.513 9.513 also D=-0.013 Addy=0.007 -> SpielerY= 9.506 Folge: Figur scheint sanft einzuschweben. Selbst bei ansteigendem Gelände wird optimal ausgeglichen: Beispiel für 1/2 Distanz-AddY: Ausgangssituation: Boden bei 9.5, steigt um 0.05 Spieler bei 9.6, AddY bei +/- 1/2-Distanz das ergibt folgende SpielerY: 9.6 / 9.5 also D=-0.1 Addy=0.05 -> SpielerY=9.55 9.55 /9.55 also D=-0.0 Addy=0.0 -> SpielerY= 9.55 9.55 /9.60 also D=+0.05 Addy=0.025 -> SpielerY= 9.575 9.575 / 9.65 also D=-0.075 Addy=0.037 -> SpielerY= 9.617 Folge: Figur scheint sanft einzuschweben. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich bekomm das Ruckeln beim Berab laufen einfach nicht weg ..
Die Antwort von dir Midimaster versteh ich nicht so recht Ich hab mit schon vielem rumgespielt wie zb auch bei einer kleineren DIfferenz langsamer anziehen, doch außer das es Dumm aussieht wenn man spring, ruckelt der Spieler immer noch den Berg runter. Wenn ihr wollt Poste ich auch den Kompletten Code dann könnt ihr es testen. |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
dann teste doch mal mit einem DEBUGLOG-Befehl wie der y-Wert der Figur sich laufend ändert. Möglicherweise ist ja irgendwo in der Berechnung eine INT-Variable statt einer FLOAT. Durch die Rundung käme es dann zu Wertesprüngen.
BlitzBasic: [AUSKLAPPEN] If EntityCollided(player,type_scene) Wenn Deine Figur sich dem "kritischen Bereich von +2 nähert, könntest du mit kleineren Y-Bewegungen näher an die 2 kommen als mit -0.35, was ja im Extremfall zu einem Wert von bis zu 1.66 Abstand führen könnte Wieso überhaupt >2? Und wo ist der Code für Bergauf? |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja meine Rechnung ist eher ganz einfach gehalten vielleicht liegt es daran.
Bergauf funktioniert alles ganz normal so wie es soll, ohne ruckeln, ohne langsamer werden. Ich Poste mal hier meinen Kompletten Code damit du/ihr seht was alles zusammen hängt. Es ist alles durch Komentare Abgegliedert, ist also keine große Suchaktion ![]() Hier die nötigen Dateien BlitzBasic: [AUSKLAPPEN] AppTitle "3D Necro Game" |
||
- Zuletzt bearbeitet von Ronon_Dex am Sa, Dez 17, 2011 14:05, insgesamt 2-mal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast Du das mit dem DEBUGLOG überhaupt ausprobiert?
BlitzBasic: [AUSKLAPPEN] Print differenz() Was ist da falsch? Die Funktion RETURNed eine INT und keine FLOAT. So geht es richtig: BlitzBasic: [AUSKLAPPEN] Print differenz() |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tut mir leid ich hatte das vorher gepostet.
... Ich weis jetzt zwar wie meine Differenz ist jedoch bringt mich das bei meinem Problem mit dem Ruckeln nicht weiter. Ich habe schon verschiedene Sachen ausprobiert: - Differenz abfrage erhöht - Differenz abfrage verringert - 2 Gravitations stufen bei verschiedener Differenz (Y=-0.35 und Y=-0.01) - Mit den Werten der Anziehung herumgespielt lezteres sieht man oben in meinem Post, jedoch hat nichts davon etwas gebracht, es sah nur stellenweise dumm aus wenn der Spieler kurz vor dem Boden ganz langsam sinkt. Ich schätze das Problem ist, das ich zu langsam angezogen werde beim Bergablaufen und deswegen die Schneller Stufe wieder eingreift, doch sobald ich die 2 Stufe ein bisschen verschnellere, kommt ja wieder das Ruckeln raus(das eh die ganze Zeit, beim Bergab laufen, da ist) |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
und? wie ist denn deine Differenz? Hast Du die Funktion jetzt geändert? so wie bei dir liefert die nur 0 oder 1 zurück!
Und meine Fragen hast Du auch nicht beantwortet! Wieso >2? und dann mal was zu deinem Code.... So liefert man das echt nicht ab, wenn man Hilfe möchte. Wer soll diesen Code starten können ohne alle deine Dateien zu haben? Bitte reduziere Deine Code auf das Nötigste. Entferne alles, was mit Texturen zu tun hat und sende die Terrainmap als Bild im Beitrag mit. Oder erwartest Du , dass jeder der dir helfen will erst mal den Code so lange entlaust, bis er ihn endlich zum Laufen bringt? Ich habe ich gerade mal versehentlich gestartet und bin nicht wieder rausgekommen und musste echt den RESET am Computer betätigen. Also wirklich.... Hier mal ein paar Regeln für Code, der an Dritte gehen soll: Zitat: - KEINE unnötigen Dateien laden
- Nötige Dateien mitliefern - Keine unnötigen Code-Zeilen - Kein Full-Screen Graphics!!! Wie willst du den DEBUGGER sehen? - Keine Auto-Mouse-Position. Wie will ich da noch wo anders hinklicken? - Eine Abbruchmöglichkeit per Tastatur einbauen Kein Wunder, dass keiner hilft.... und wieso sind die Kisten so weit weg? Was soll das während der Testphase? Wer außer dir solll die so jemals finden? |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Tut mir leid an die GFX's dachte ich nicht ![]() Ist aber kein Grund gleich unfreundlich zu werden, Ich bin auch nur ein Mensch und habe meine Fehler. Man kann den Code mit "Ende" Beenden ... wenn man nicht im Menü ist (ESC zum beenden vom Menü) oder bei den Grafiken auf Beenden. Ich hatte das eig nur gepostet um den Zusammenhang zu allem zu erkennen. Die differenz ist sehr unterschiedlich immer zwischen 1,5 (am anfang) und 1,95 (nach dem die höhe verändert wurde und dann wieder am gleichen Platz ist) 2,0 habe ich gewählt weil unter normalen umständen die Schwankung von der Differenz nicht höher als 2,0 ist und deshalb ab 2,0 ein Sprung/Fall sein muss (habe im Post oben auf Fenstermodus gestellt und poste gleich einen Link wo man die Grafiken runterladen kann) //Edit: Hier die Dateien |
||
- Zuletzt bearbeitet von Ronon_Dex am Sa, Dez 17, 2011 13:57, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
wie ist es den damit?
BlitzBasic: [AUSKLAPPEN] If Differenz(boden,player)>2.0 Then hier mal eine dramtische gekürzte Version für alle anderen: BlitzBasic: [AUSKLAPPEN]
Nachtrag I der TerrainLoad müßte natürlich wieder aktiviert werden, aber ich warte noch auf die Veröffentlichung des Terrain.... Nachtrag II ich hab mal die Sinkrate von den 0.35 auf 0.1 reduziert, sonst sinkt er viel zu schnell. Das ganze sieht bei einem waagrechten Terrain ganz harmonisch aus! Ich warte immer noch auf das Terrainbild.... Das kannst du einfach in dein Archiv hochladen und dann hier im Beitrag verlinken! Wart.... wart.... |
||
- Zuletzt bearbeitet von Midimaster am Sa, Dez 17, 2011 14:04, insgesamt einmal bearbeitet
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Terrain ist bereits im GFX ordner den ich oben zum Download gestellt habe dabei (habe ihn mit hochgeladen)
somit kann jeder wieder die Volle Version von mir nutzen ![]() ... Das ruckeln bleibt leider erhalten mit diesem Code: BlitzBasic: [AUSKLAPPEN] If Differenz(boden,player)>2.0 Then vielleicht wird es ja jetzt klarer dadurch, dass man jetz das Gerüst komplett testen kann Von BlitzForum: https://www.blitzforum.de/upload/file.php?id=11239 |
||
- Zuletzt bearbeitet von Ronon_Dex am Sa, Dez 17, 2011 14:08, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
und nochmal die gleiche Frage.... Hast Du die Funktion in umgeändert? Im Beitrag steht sie immer noch ohne # | ||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja habe sie umgeändert .. habe es nun auch im Beitrag geändert | ||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, ich hab das Ganze getestet....
der Fehler rührt daher, weil eben manchmal um 0.35 reduziert werden kann, danach ist er zu nah am Boden, da geht wieder gar nix und er bewegt sich fast waagrecht, bis dann wieder der Abstand so groß ist, dass gleich 0.35 abgezogen werden. Durch diesen Wechsel entsteht der Eindruck des Ruckelns. eigentlich ist es aber eine treppenartige Bewegung. wie schon in meinem ersten Beitrag erwähnt, wäre eine harmonische Bewegung klüger als eine Bewegung die an einem festgelegten Abstand (>2) plötzlich endet. mach es doch so, dass du die Bewegung mit einer Bescheunigung harmonisierst. BlitzBasic: [AUSKLAPPEN] ; Gravitation ------------------- |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Ronon_Dex |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank, Midimaster
mit diesem Code klappt es schon viel besser. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group