Funktion für Dim-Feld
Übersicht

MrColorkillerBetreff: Funktion für Dim-Feld |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Leute,
Ich bin neu hier, also verzeiht mir, wenn die Begriffe nicht ganz richtig da stehen. Ich habe folgendes Problem: Ich will, dass meine Figur auf der Plattform springt, die gezeichnet wird, wenn das Dim-Feld abgelesen wird. Function: Code: [AUSKLAPPEN] Function tiles()
For y=1 To mapsy For x=1 To mapsx If readinfo = 1 Then Read array(x,y) If array(x,y) = 2 Then DrawImage(img_tile1,(x*50)-50,(y*50)-50) While ImagesCollide (img_player1,plx,ply,0,img_tile1,(x*50)-50,(y*50)-50,0) yspeed=0 ply=ply-gravitation# Wend EndIf Next Next readinfo = 0 End Function mainloop: Code: [AUSKLAPPEN] SetBuffer BackBuffer()
Const gravitation#=0.55,jumpspeed#=10 Repeat Cls DrawImage img_player1,plx,ply yspeed=yspeed+gravitation# ply=ply+yspeed tiles() If KeyHit(57) And yspeed=0 Then yspeed=-jumpspeed If KeyDown(203) plx=plx-5 If KeyDown(205) plx=plx+5 Flip Until KeyHit(1) WaitKey End Das Problem ist, dass meine Figur zwar kurz auf der Plattform stehen bleibt, dann jedoch hindurch fällt. Ich bedanke mich jetzt schon für eure Hilfe mfg, Mrcolorkiller |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Von oben an:
BlitzBasic: [AUSKLAPPEN] If readinfo = 1 Then Read array(x,y) Das würde ich aus der Schleife herausnehmen. Code wird mit der Zeit immer unübersichtlicher und Bedingungen die nur einmal ausgeführt werden, machen die Sache nicht besser. Ich würde das nach dem Laden der Medien einmal ausführen - passt auch besser, wenn du auf externe Level umstellst. BlitzBasic: [AUSKLAPPEN] While ImagesCollide (img_player1,plx,ply,0,img_tile1,(x*50)-50,(y*50)-50,0) Was du als erstes brauchst, ist eine Konstante (const ![]() Wenn eine Kollision stattfindet, bewegst du den Spieler? Da fehlt irgendwie ein not ![]() Und auch diese Kollisionsgeschichte sollte nichts in der Zeichenroutine zu suchen haben - man kann ja Tiles direkt ansprechen. Da jedes Tile mit dem Spieler auf Kollision zu prüfen bringt nur performance Verlust und ist nicht wirklich nötig. |
||
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) |
MrColorkiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] If readinfo = 1 Then Read array(x,y)
Zitat: Das würde ich aus der Schleife herausnehmen.
wenn ich das aus der schleife herausnehme heisst es "out of data". deshalb habe ich es eigentlich reingetan. was die whileschleife angeht: sollte ich die im mainloop vor der function tiles() oder danach platzieren? Zu deiner Frage: Ich bewege den Spieler nicht und wo soll ich ein not hinsetzen? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst natürlich das Array einmal befüllen. Ansonsten: In welcher Zeile kommt der Fehler? Wie lädst du deine Karte?
Ich würde erst die Kollision abarbeiten und dann zeichnen. Aus der Spielerposition kannst du ja die umgebenen Tiles berechnen. Wenn sich kein festes Tile unter dem Spieler befindet, lässt du ihn ein Stück fallen, ansonsten setzt du ihn auf das Bodenniveau (y position) des Tiles. |
||
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) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Fehler liegt im Zurücknehmen der letzten Addition in der Kollision.
Hier hast Du richtig gedacht: Wenn der Spieler auf einem Tile zu stehen kommt, dann sollte sich sein Y-Wert nicht mehr ändern können und der letzte Schritt wird rückgängig gemacht. Allerdings hattest Du zuvor yspeed# zu ply# addiert. Jetzt ziehst Du aber nur gravitation# ab! Richtig wäre: BlitzBasic: [AUSKLAPPEN] While ImagesCollide (img_player1,plx,ply,0,img_tile1,(x*50)-50,(y*50)-50,0) |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
MrColorkiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie kann ich es schreiben, dass das programm das array nur einmal befüllt? | ||
MrColorkiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Midimaster schrieb:
Zitat: While ImagesCollide (img_player1,plx,ply,0,img_tile1,(x*50)-50,(y*50)-50,0)
ply=ply-yspeed yspeed=0 Wend wenn ich das mache hängt sich das programm aber auf. es befindet sich in einer endlosschleife |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ohja!
jetzt versteh ich erst deinen code... dann vergiß erst mal meinen einwand, es muss dann an was anderem liegen! sorry... Frage: Ist den ply# und yspeed# irgendwo als GLOBAL defniert? |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
MrColorkiller hat Folgendes geschrieben: Wie kann ich es schreiben, dass das programm das array nur einmal befüllt? Du weißt ja, welche Befehle dafür nötig sind, nicht? Bevor du die Hauptschleife startest, musst du nur einmal das Array durchgehen und in jedes Feld mir read einen Wert aus dem Data-feld einlesen.
Und bitte editiere Beiträge anstatt hintereinander zu posten, danke. |
||
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) |
MrColorkiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Ist den ply# und yspeed# irgendwo als GLOBAL defniert?
ply schon aber yspeed nicht was ich auch noch komisch finde: wenn ich die While schleife aus der funktion rausnehme und in den mainloop setze fällt der spieler nur durch und hält gar nicht mehr an |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ich denke, es liegt an den fehlende GLOBALs für alle Variablen, die in der Funktion vorkommen:
Zitat: img_tile1%
img_player1% plx# ply# yspeed# gravitation# readinfo% folgendes läuft bei mir fehlerfrei: BlitzBasic: [AUSKLAPPEN] Graphics 800,600,32,2 |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
MrColorkiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah endlich funktioniert es!!!
Danke viel viel mals ![]() ![]() Ein echt gutes Forum |
||
![]() |
Addi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde dir auserdem noch empfehlen RectsOverlap(...) anstatt ImagesCollide(...) zu benutzen, weil es einfach schneller ist. | ||
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group