player bewegt sich nicht, warum?
Übersicht

BobbleboyBetreff: player bewegt sich nicht, warum? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
herrgott die funktionen
player bewegt sich nicht, warum? Code: [AUSKLAPPEN] ;Tilemap versuch
AppTitle ("Tile map") ;___________Einstellungen grax= 1024 gray= 768 timer = CreateTimer(60) Graphics grax,gray,0,2 SetBuffer BackBuffer() SeedRnd MilliSecs() ;___________bilder und sounds laden Global tile1 = LoadImage ("tile1.bmp") ;Global tile2 = LoadImage ("tile2.bmp") Global playerbild = LoadImage("player.bmp") ;___________Karte lesen Dim map (10,10) playerx=1 playery=1 Restore mapdata For y=0 To 9 For x=0 To 9 Read map(x,y) Next Next ;___________H A U P T S C H L E I F E While Not KeyDown(1) Cls drawmap() moveplayer(playerx,playery) drawplayer(playerx,playery) WaitTimer timer Wend End ;___________Functions Function drawplayer(x,y) DrawImage playerbild , x*32 , y*32 End Function Function drawmap() For y=0 To 9 For x=0 To 9 If map(x,y) = 1 DrawImage tile1 , x*32 , y*32 End If Next Next End Function Function moveplayer(x,y) If KeyDown(200) Or KeyDown(17);nach oben y=y-1 End If If KeyDown(208) Or KeyDown(31);nach unten y=y+1 End If If KeyDown(203) Or KeyDown(30);nach links x=x-1 End If If KeyDown(205) Or KeyDown(32);nach rechts x=x+1 End If ;Return End Function ;___________die karte .mapdata Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,0,0,0,1 Data 1,0,0,1,0,0,0,0,0,1 Data 1,0,0,0,1,0,1,0,0,1 Data 1,0,0,0,0,0,0,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
In den Funktionen sind x, y lokale Variablen die am ende der Funktion verfallen.
![]() ![]() |
||
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) |
![]() |
Pummelie |
![]() Antworten mit Zitat ![]() |
---|---|---|
flip![]() |
||
It's done when it's done. |
Bobbleboy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Xeres hat Folgendes geschrieben:
ist es möglich, das x und y zurückgeben werden, ohne das ich sie global definiere? ich will später diese funktion extern abspeichern und bei einem anderem projekt aufrufen können. bzw ich fühle mich besser, wenn die funktion auch "alleine" funktioniert. edit: flip hat wirklich gefehlt, aber player steht immernoch |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein... kannst aber die Globale mit in deine Externe datei reinschreiben, also
Code: [AUSKLAPPEN] Global x,y
Function MovePlayer() ;Dann hier mit den Tasten x und y ändern end Function 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! |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da BB keine Pointer anbietet wohl nicht ohne Umwege, die man sich mit zwei Globalen sparen könnte.
Du könntest den Spieler natürlich als Type ![]() |
||
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) |
Bobbleboy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Xeres hat Folgendes geschrieben: Da BB keine Pointer anbietet wohl nicht ohne Umwege, die man sich mit zwei Globalen sparen könnte.
Du könntest den Spieler natürlich als Type ![]() okay bis gleich edit: herrgott ich hasse funktionen Code: [AUSKLAPPEN] ;Tilemap versuch
AppTitle ("Tile map") ;___________Einstellungen grax= 1024 gray= 768 timer = CreateTimer(60) Graphics grax,gray,0,2 SetBuffer BackBuffer() SeedRnd MilliSecs() ;___________bilder und sounds laden Global tile1 = LoadImage ("tile1.bmp") ;Global tile2 = LoadImage ("tile2.bmp") Global playerbild = LoadImage("player.bmp") ;___________Karte lesen Dim map (10,10) Restore mapdata For y=0 To 9 For x=0 To 9 Read map(x,y) Next Next ;___________PLayer spawn a.player = New player a\bild = playerbild a\x=1 a\y=1 a\s=1 ;s für speed ;___________H A U P T S C H L E I F E While Not KeyDown(1) Cls drawmap() moveplayer(a\x,a\y) drawplayer(a\x,a\y) Flip 0 WaitTimer timer Wend End ;___________Types Type player Field x# Field y# Field s# Field bild End Type ;___________Functions Function drawplayer(x,y) DrawImage playerbild , x*32 , y*32 End Function Function drawmap() For y=0 To 9 For x=0 To 9 If map(x,y) = 1 DrawImage tile1 , x*32 , y*32 End If Next Next End Function Function moveplayer(x,y) If KeyDown(200) Or KeyDown(17);nach oben y=y-1 End If If KeyDown(208) Or KeyDown(31);nach unten y=y+1 End If If KeyDown(203) Or KeyDown(30);nach links x=x-1 End If If KeyDown(205) Or KeyDown(32);nach rechts x=x+1 End If a\x = x a\y = y Return a End Function ;___________die karte .mapdata Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,0,0,0,1 Data 1,0,0,1,0,0,0,0,0,1 Data 1,0,0,0,1,0,1,0,0,1 Data 1,0,0,0,0,0,0,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 "Variable must be a type" in der funktion moveplayer() in der das erste mal a\x vorkommt |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Bitte zitiere nicht deine direkten vorposter
2. Bitte rücke deinen Code ein, damit du und wir ihn besser lesen können. 3. Übergebe das Objekt, nicht seine Felder: Code: [AUSKLAPPEN] Function moveplayer(p.player)
If KeyDown(200) Or KeyDown(17);nach oben p\y=p\y-1 [...] |
||
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) |
Bobbleboy |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
habe es jetzt wie folgt gelöst:
Code: [AUSKLAPPEN] ;Tilemap versuch
AppTitle ("Tile map") ;___________Einstellungen grax= 1024 gray= 768 timer = CreateTimer(60) Graphics grax,gray,0,2 SetBuffer BackBuffer() SeedRnd MilliSecs() ;___________bilder und sounds laden Global tile1 = LoadImage ("tile1.bmp") ;Global tile2 = LoadImage ("tile2.bmp") Global playerbild = LoadImage("player.bmp") ;___________Karte lesen Dim map (10,10) Restore mapdata For y=0 To 9 For x=0 To 9 Read map(x,y) Next Next ;___________PLayer spawn Global a.player = New player a\bild = playerbild a\x=1 a\y=1 a\s=1 ;s für speed ;___________H A U P T S C H L E I F E While Not KeyDown(1) Cls drawmap() moveplayer(a\x,a\y) collision() drawplayer(a\x,a\y) Flip 0 WaitTimer timer Wend End ;___________Types Type player Field x# Field xalt# Field y# Field yalt# Field s# Field bild End Type ;___________Functions Function drawplayer(x,y) DrawImage playerbild , x*32 , y*32 End Function Function drawmap() For y=0 To 9 For x=0 To 9 If map(x,y) = 1 DrawImage tile1 , x*32 , y*32 End If Next Next End Function Function moveplayer(x,y) a\xalt = x a\yalt = y If KeyHit(200) Or KeyHit(17);nach oben y=y-1 End If If KeyHit(208) Or KeyHit(31);nach unten y=y+1 End If If KeyHit(203) Or KeyHit(30);nach links x=x-1 End If If KeyHit(205) Or KeyHit(32);nach rechts x=x+1 End If a\x = x a\y = y End Function Function collision() If map(a\x,a\y) = 1 a\x = a\xalt a\y = a\yalt End If End Function ;___________die karte .mapdata Data 1,1,1,1,1,1,1,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,0,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,0,1,1,0,0,0,0,0,1 Data 1,0,0,1,0,0,0,0,0,1 Data 1,0,0,0,1,0,1,0,0,1 Data 1,0,0,0,0,0,0,1,1,1 Data 1,0,0,0,0,0,0,0,0,1 Data 1,1,1,1,1,1,1,1,1,1 ist daran etwas unschön gelöst? im prinzip habe ich einfach a.player global gemacht, aber ich bin für verbesserungen offen ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest...
- Alle Variablen deklarieren - Aussagekräftige Variablennamen verwende: Code: [AUSKLAPPEN] Local player.Tplayer = New Tplayer
Wenn du den player Global deklarierst, macht es wenig Sinn, ihn an die Funktion zu übergeben... |
||
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) |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und ich finde das trotzdem unsinnig, extra einen Type zu Diffinieren, bei dem von vornherein klar ist, das es nur einen Eintrag geben wird. Mach es lieber mit den Globalen, ist erstens die Schönere Lösung und zweitens weniger code..
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! |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
An sich ist ein Type schon sinnvoll. Types werden nicht nur dort angewendet, wo es mehrere Vorkommnisse von etwas geben wird, sondern auch da, wo man mehrere Variablen in einem griffigen Namen zusammenfassen will.
Für alle Spielervariablen nun Globale zu benutzen erscheint mir schon sehr unschön. Das umfasst ja nicht nur Werte wie X und Y, sondern später auch noch Lebenspunkte, Munition, Timer, Score, Geschwindigkeit, Items etc. etc. Diese Variablen dann alle im globalen Namensraum umherschwirren zu lassen schreit nach irgendwelchen Komplikationen, da man dann plötzlich mal eine Globale definiert, die man schon lokal in einer Funktion verwendet. Und so nebenbei, wenn man alle Funktionen auf einen Spielertype ausrichtet, kann man auch ohne weiteres einen Mehrspielermodus einbauen ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bobbleboy hat Folgendes geschrieben: habe es jetzt wie folgt gelöst:
Code: [AUSKLAPPEN] ;
Global a.player = New player a\bild = playerbild a\x=1 a\y=1 a\s=1 ;s für speed ;___________H A U P T S C H L E I F E While Not KeyDown(1) Cls drawmap() moveplayer(a\x,a\y) collision() drawplayer(a\x,a\y) Flip 0 WaitTimer timer Wend End ;___________Types Type player Field x# Field xalt# Field y# Field yalt# Field s# Field bild End Type ;___________Functions Function moveplayer(x,y) a\xalt = x a\yalt = y If KeyHit(200) Or KeyHit(17);nach oben y=y-1 End If If KeyHit(208) Or KeyHit(31);nach unten y=y+1 End If If KeyHit(203) Or KeyHit(30);nach links x=x-1 End If If KeyHit(205) Or KeyHit(32);nach rechts x=x+1 End If a\x = x a\y = y End Function Was Xeres meint, um es schöner zu machen, ist Player nicht Global zu schreiben. Dann hast Du von den Types ja kaum noch das vorteil. Schöner wäre es, wenn Du Player "normal" als local bevor/in der Hauptschleife deklarierst. Anschliessend nicht jede einzenle Wert aus der Player-Type rüberschickst, sondern nur der Typ ansich: BlitzBasic: [AUSKLAPPEN]
Hier habe ich Player als local deklariert, und in der Funktion nur noch als "a" übergeben, anstatt jede wert einzelne. Damit kannst Du später der "move"-funktion für mehrere Objekten benutzen, ohne nach zu fragen zu müssen wer gemeint ist. Der Funktion bearbeitet immer denn, der gerade in der Funktionsaufruf genannt wird. Ansonsten (weil es sich nur um ein Beispiel handelt) habe ich noch ein bisschen geschnitten. BlitzBasic: [AUSKLAPPEN]
Der Funktionsdefinition ist jetzt geändert. Hier wird nicht mehr x und y "MovePlayer(x, y)" übergeben, sondern nur noch der Name vom genannte Objekt. "MovePlayer(a)" Du könntest auch den "a" innerhalb diese Funktion durch etwas anderes ersetzen, um das unterschiedt deutlicher zu machen. Innerhalb diese Funktion habe ich "x" und "y" durch "a\x" und "a\y" ersetzt. Damit brauchst Du am ende nicht jede Wert in der Funktion zu überschreiben. Das vorteil, wie gesagt, ist das man diese Funktion (oder, vielleicht besseres beispiel, Deine Draw-Funktion) nun für alle Objekten benutzen kannst, ohne schwierigkeiten zu bekommen. Wenn Du später die "Inhalt" des Player-Types erweiterst (leben, waffen, kleidung, usw) dann brauchst Du trotzdem immer nur "a" zu übergeben, der Funktion weisst dan genug. (Wie Noobody schon erwähnt hat) |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
ToeB hat Folgendes geschrieben: Und ich finde das trotzdem unsinnig, extra einen Type zu Diffinieren, bei dem von vornherein klar ist, das es nur einen Eintrag geben wird. Mach es lieber mit den Globalen, ist erstens die Schönere Lösung und zweitens weniger code..
mfg ToeB Setzen 6! Was Du als unsinnig empfindest ist die deutlich saubere und elegantere Lösung, wie Noobody ja schon ausführte. Ein Type ist mit wenigen Zeilen Code drinne und erhält später massiv die Ordnung im Code. |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group