Include

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Krumu1201

Betreff: Include

BeitragMi, Okt 15, 2014 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,

gibt es eine Möglichkeit eine Variable in den Include Befehl reinzupacken?

wenn ich es so mache

Code: [AUSKLAPPEN]
global level = 1
Include "lvl"+level+".bb"


bekomme ich immer die Fehlermeldung "Unable to open include file".

Gruß

Krumu1201

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Okt 16, 2014 0:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Include wird ein existierender Code vor dem compilieren eingeschoben.

Eine Variable ist ein änderbarer Wert der während der Laufzeit entsteht.

Die logische Schlussfolgerung ergibt, dass es so in der Form nicht funktionieren kann.

Je nach Aufgabenstellung könnten Scripte die Lösung dazu sein. Lua bietet da bereits eine gute Grundlage um variable Inhalte nutzen zu können.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Xeres

Moderator

BeitragDo, Okt 16, 2014 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls du Leveldaten laden willst, lade sie aus Dateien.
Falls jedes Level eigenen Code benutzen muss... machst du entweder was grob falsch oder du brauchst tatsächlich eine Form von Skriptsprache.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Krumu1201

Betreff: Danke

BeitragFr, Okt 17, 2014 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
für die Antworten. Mit Skriptsprachen kenn ich mich nicht aus. Gibt zwar bestimmt Tutorials dafür, aber denke ich muss das problem anders lösen.

Gruß

Krumu1201

BladeRunner

Moderator

BeitragFr, Okt 17, 2014 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest dein Problem einfach ausführlicher beschreiben, vielleicht fällt uns ja ein passender Workaround ein.
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
 

Krumu1201

Betreff: ok

BeitragSa, Okt 18, 2014 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
versuche mal mein problem zu beschreiben:

Baue ein minirpg, indem man auf einer map eine bestimmte anzahl gegner töten oder andere quest erledigen muss ( weiß ich noch nicht). Hat man das ziel erreicht
soll ein levelwechsel erfolgen. Bisher ist das erste level mit data read befehl eingebaut. Wollte die levels dann mit anzahl der level variable includieren. Reicht das an Problembeschreibung?

Gruß

Krumu1201

Xeres

Moderator

BeitragSo, Okt 19, 2014 0:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Schreibe dir einen Level-Editor und speichere die Level in deinem eigenen Format.
Datablöcke sind gut für winzige Spiele und um den Umgang mit Daten zu lernen, aber ungeeignet für alles, was über ein simples 2D Array hinaus geht.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

BladeRunner

Moderator

BeitragSo, Okt 19, 2014 8:06
Antworten mit Zitat
Benutzer-Profile anzeigen
What xeres said.
Speicher die Daten in eine externe Datei, sieh dir dazu die Befehle in der Onlinehilfe an. Für den Strart reicht es ja wenn Du das ganze statisch aufbaust und in eine .txt per writeline speicherst.
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
 

Krumu1201

Betreff: Ok nochmals danke

BeitragMo, Okt 20, 2014 1:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Das minirpg sollte eigentlich nur eine art Test für ein hauptrpg werden, wofür ich schon einen leveleditor geschrieben habe. Ich dachte könnte das mit include data read usw. schnell fertigmachen. Nur mein eigentliches Problem ist es die kollisionsabfrage des Minirpgs in das Hauptspiel zu übertragen, aber ich glaube diese Problemstellung würde den Rahmen dieser Unterhaltung sprengen.

Gruß

Krumu1201

BladeRunner

Moderator

BeitragMo, Okt 20, 2014 8:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Das lässt sich nur herausfinden wenn Du es probierst (also, ob es den Rahmen sprengt).
Du könntest uns die Problematik schildern und die relevanten Teile deines Codes zeigen. Dann kann man gucken ob man dir helfen kann.
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
 

Krumu1201

Betreff: Kollisionsabfrage

BeitragMo, Okt 20, 2014 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Minirpg:


spielerdaten
Code: [AUSKLAPPEN]
         
;ermittelt welche umliegenden tiles der spieler besetzt
 ty1 = Floor(ys/Float(64)) ;tile abgerundet
 ty2 = Ceil(ys/Float(64))  ;tile aufgerundet

 tx1 = Floor(xs/Float(64)) ;tile abgerundet
 tx2 = Ceil(xs/Float(64))  ;tile aufgerundet

;spieler bewegen

;OBEN
 If KeyDown(200) Then
    richtung = "oben"
    frame2 = frame2 +1
    If frame2 > 11 Then frame2 = 0
    If tile_map( tx1 , (ys-bewegungSpieler) /64) < 2 And  tile_map( tx2 , (ys-bewegungSpieler) /64)  <2  Then
      ys = ys - bewegungSpieler
    Else
      ys = ys + bewegungSpieler
      ys = (ys/64)*64
    End If     
 EndIf


;Unten
 If KeyDown(208) Then
    richtung = "unten"
    frame2 = frame2 +1
    If frame2 > 11 Then frame2 = 0
    If tile_map( tx1 , (ys+bewegungSpieler) /64+1) < 2 And  tile_map( tx2 , (ys+bewegungSpieler) /64+1)  <2  Then
      ys = ys + bewegungSpieler
    Else
      ys = ys - bewegungSpieler
      ys = (ys/64+1)*64
    End If     
 EndIf

;Links
 If KeyDown(203) Then
   richtung = "links"
   frame2 = frame2 +1
   If frame2 > 11 Then frame2 = 0
   If tile_map( (xs -bewegungSpieler)/64 , ty1) < 2 And tile_map( (xs-bewegungSpieler)/64 , ty2 ) < 2 Then
     xs = xs -bewegungSpieler
   Else
     xs = xs+bewegungSpieler
     xs = (xs/64)*64
   EndIf
 EndIf


;rechts
  If KeyDown(205) Then
     richtung = "rechts"
     frame2 = frame2 +1
     If frame2 > 11 Then frame2 = 0
     If tile_map( (xs+bewegungSpieler  )/64+1 , ty1) < 2 And  tile_map( (xs+bewegungSpieler)/64+1 , ty2 ) < 2 then
      xs = xs +bewegungSpieler
     Else
      xs = xs - bewegungSpieler
      xs = (xs/64+1)*64
     End If
  EndIf







;map

Code: [AUSKLAPPEN]

;map array
 Dim tile_map$(15,11)
  For x = 1 To 11
    For y = 0 To 15
       Read tile_map(y,x)
    Next
  Next


Code: [AUSKLAPPEN]


.level   
   Data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
   Data 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
   Data 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
   Data 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
   Data 2,1,1,1,3,1,1,3,1,1,1,1,1,1,1,2
   Data 2,1,1,1,1,3,3,1,1,1,1,1,1,1,1,2
   Data 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
   Data 2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2
   Data 2,1,1,2,2,2,1,1,1,2,2,1,1,1,1,2
   Data 2,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2
   Data 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2


Hauptspiel

spielerdaten

Code: [AUSKLAPPEN]
;spieler bewegen
      If KeyHit(205)  Then ;nach rechts gehen
         richtung = "rechts"
         xmapKol =spielerfeldx+1
         If xmapKol > 15 Then xmapKol = 15
         If TileStatusFeld(spielerfeldy,xmapKol) = 0 And objektFeld(spielerfeldy,xmapKol) = 0 Then   
            xs = xs + bewegungSpieler
            frame2 = frame2 +1
            If frame2 > 11 Then frame2 = 0
            spielerfeldx = spielerfeldx+1
            If spielerfeldx > 15 Then spielerfeldx = 15
         EndIf
      endIf
      If KeyHit(203)  Then ;nach links gehen
       richtung = "links"
       xmapKol = spielerfeldx-1
       If xmapKol < 0 Then xmapKol = 0
       If TileStatusFeld(spielerfeldy,xmapKol) = 0 And objektFeld(spielerfeldy,xmapKol) = 0   Then   
          xs = xs - bewegungSpieler
          frame2 = frame2 +1
          If frame2 > 11 Then frame2 = 0
          spielerfeldx = spielerfeldx-1
          If spielerfeldx < 0 Then spielerfeldx = 0
       EndIf
      EndIf
      If KeyHit(200)  Then ;nach oben gehen
       richtung = "oben"
       ymapKol = spielerfeldy-1
       If ymapKol < 0 Then ymapKol = 0
       If TileStatusFeld(ymapKol,spielerfeldx) = 0 And objektFeld(ymapKol,spielerfeldx) = 0   Then    
          ys = ys - bewegungSpieler
          frame2 = frame2 +1
          If frame2 > 11 Then frame2 = 0
          spielerfeldy = spielerfeldy-1
          If spielerfeldy < 0 Then spielerfeldy = 0
       EndIf
      EndIf
      If KeyHit(208)  Then ;nach unten gehen
       richtung = "unten"
       ymapKol = spielerfeldy+1
       If ymapKol > 10 Then ymapKol = 10
       If TileStatusFeld(ymapKol,spielerfeldx) = 0 And objektFeld(ymapKol,spielerfeldx) = 0 Then      
          ys = ys + bewegungSpieler
          frame2 = frame2 +1
          If frame2 > 11 Then frame2 = 0
          spielerfeldy = spielerfeldy+1
          If spielerfeldy > 10 Then spielerfeldy = 10
       EndIf
      EndIf



tiletype:

Code: [AUSKLAPPEN]
;map
   Type mapTile
    Field x
    Field y
    Field tile
   
   End Type
   
   Dim mapFeld.mapTile(10,15)
   
   For mpt_zeile = 0 To 10
    For mpt_spalte = 0 To 15
      mapFeld(mpt_zeile,mpt_spalte) = New mapTile
      mapFeld(mpt_zeile,mpt_spalte)\tile = leer
    Next
   Next



abschnittDaten

Code: [AUSKLAPPEN]

Global Absschnitt = 1 ;für absschnitt zeichnen
Global AbschnittDatei$
Global a$

Dim AbschnittFeld(10,15)



Abschnitt per datei laden

Code: [AUSKLAPPEN]
.Abschnitt_laden
Function Abschnitt_laden()
 
   
 ;alle daten werden nach abschnittswechsel auf null gesetz
    zeile = 0
    spalte = 0
    a = ""
   

  ;dateien werden je nach abschnitt festgelegt
   AbsschnittDatei = ReadFile("Abschnitte/A"+Absschnitt+".abs")


 ;abschnittdatei einlesen
    For Zeile = 0 To 10
   A = ReadLine(AbsschnittDatei)
        For Spalte = 0 To 15
     AbschnittFeld(Zeile,Spalte) = Mid$(A,Spalte+1,1)
   Next
     Next
   
   
   


 ;alle dateien schliessen

      CloseFile AbsschnittDatei

   
   


End Function




Code: [AUSKLAPPEN]
.map_zeichnen
Function map_zeichnen()

  x = 0
  y = 64
  For z1 = 0 To 10
    For z2 = 0 To 15
     mapFeld(z1,z2)\x = x
      mapFeld(z1,z2)\y = y


      x = x +64
    ;tiles auf map
      DrawImage mapFeld(z1,z2)\tile,mapFeld(z1,z2)\x,mapFeld(z1,z2)\y
      
    Next
    x = 0
    y = y +64
   Next


End Function



Code: [AUSKLAPPEN]
.map_zuweisen
Function map_zuweisen()

   
   
   
    For Zeile = 0 To 10
       For Spalte = 0 To 15
       ;tiles
          Select AbschnittFeld(Zeile,Spalte)
            Case 0 mapFeld(zeile,Spalte)\tile = leer
            Case 1 mapFeld(zeile,Spalte)\tile = boden_tile1
            Case 2 mapFeld(zeile,Spalte)\tile = boden_tile2
            Case 3 mapFeld(zeile,Spalte)\tile = busch_tile_test
            Case 4 mapFeld(zeile,Spalte)\tile = busch_tile2
            Case 5 mapFeld(zeile,Spalte)\tile = fels_gruen2
            Case 6 mapFeld(zeile,Spalte)\tile = fels_gruen3
            Case 7 mapFeld(zeile,Spalte)\tile = fels_gruen4
            Case 8 mapFeld(zeile,Spalte)\tile = tuer
          End Select
      Next
    Next

End Function



Hoffe man versteht etwas.

Gruß

Krumu1201

BladeRunner

Moderator

BeitragDi, Okt 21, 2014 9:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke schonmal für das einstellen des Codes. Ich konnte ihn bislang nur kurz überfliegen, Kommentare werden folgen.
aber: Es fehlt eine Beschreibung deines Problemes. Was funktioniert beim zusammenführen nicht, bzw. wo hapert es? Hast Du einen Code bei dem Du die Zusammenführung schon versucht hast und welche Fehler ergaben sich da? Je ausführlicher deine Fragestellung desto gezielter die potentielle Hilfe.
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
 

Krumu1201

Betreff: Achso

BeitragDi, Okt 21, 2014 10:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe ja wie ich geschrieben 2 spiele: einmal das minrpg das als test galt und das hauptrpg.
jetzt zur eindeutigen problemstellung:

im minirpg laufe ich mit keydown und die kollision mit den tiles passt dann so mit dieser bewegung.
nur im hautpspiel lade ich die map ja komplizierter und da bekomme ich die bewegung nicht so hin.
im hautpspiel laufe ich noch mit keyhit bewegung sieht aber nciht gut aus. jetzt will ich die bewegung aus dem minirpg genauso im hauptspiel haben.

packe mal 2 exen ins archiv damit man sich das problem auch visuell anschauen kann:
hautpspiel.exe und miniRpg.exe
hoffe die funktionieren, sonst melden und ich muss sie umbauen Very Happy

Gruß

Krumu1201

Xeres

Moderator

BeitragDi, Okt 21, 2014 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Minirpg:
Die Bezeichnung der Variablen solltest du als erstes überarbeiten.
- "frame2" ist total Aussagelos. Könnte mit dem Spieler was zu tun haben, aber warum dann gerade 2? Ist das die Steuerung für den zweiten Spieler? Oder wird der Spieler aus mehreren Bildern zusammen dargestellt? Wenn es nicht eindeutig ist, sollte man es eindeutig benennen. Englisch oder Deutsch aber wenn möglich einheitlich.

- "bewegungSpieler" lässt schon mehr erahnen, womit sie zu tun hat, aber immer noch nicht ganz. Gibt sie an, ob der Spieler in Bewegung ist? Ist das das Bewegungsmoment des Spielers? Besser wäre "geschwindigkeitSpieler", und am besten wäre "spielerGeschwindigkeit"; Ich jedenfalls mag eine Benennung, die von Links nach Rechts von allgemein zu speziell übergeht:
spielerBild
spielerFrame
spielerPositionX
spielerPositionY
spielerGeschwindigkeit
spielerGeschwindigkeitMaximum

- Read tile_map(y,x) Das ist nun super Verwirrend - x und y sind üblicher weise Breite und Höhe - und hier werden sie als Höhe und Breite benutzt. Gemeint ist wohl
BlitzBasic: [AUSKLAPPEN]
For y = 1 To 11
For x = 0 To 15
Read tile_map(x,y)
Next
Next

Das mag auch bei kurzen codes alles kein Problem sein, aber über kurz oder lang stolpert man über sowas wieder und denkt sich, es hätte einen bestimmten Zweck gehabt es so und nicht anders zu schreiben.

- Ich möchte dazu raten, alle Variablen zu deklarieren. Jeder vertippt sich mal - aber nur in BB erzeugt das neue, leere Variablen die schwer zu findende Bugs erzeugen. Mit IDEal im Strict modus wird man immerhin darauf aufmerksam gemacht.

- Magische Zahlen wie in "ys = (ys/64+1)*64" machen eine eigentliche simple Änderung super schwer. Eine Konstante "TILE_SIZE" macht zwar eine Zeile etwas länger - aber dafür kann man sie auch lesen und verstehen.
BlitzBasic: [AUSKLAPPEN]

;Unten
If KeyDown(208) Then

;-->
If KeyDown(KEY_DOWN) Then

;***

If frame2 > 11 Then frame2 = 0

;-->
If playerFrame > playerFrameMax Then playerFrame = playerFrameMin


;***

If tile_map( tx1 , (ys+bewegungSpieler) /64+1) < 2 Then

;-->
If tile_map( tx1 , (ys+playerSpeed) / TILE_SIZE+1) < TILE_TYPE_FREE Then


Falls ein anderer nicht schneller ist, gehe ich später noch weiter darauf ein. Zu guter letzt nur noch: Mach es den Leuten nicht schwerer als nötig dir zu helfen - linke direkt!
Hauptspiel.exe [1,4MB]
miniRpg.exe [1,4MB]

Wink
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

BladeRunner

Moderator

BeitragDo, Okt 23, 2014 10:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schliesse mich mal Xeres Ausführungen an. Zudem verstehe ich nicht ganz warum das übertragen der Bewegung nicht klappen sollte. Du hast Doch schon einen Code der die flüssige Bewegung macht. Den musst Du nur auf das Bildschirmweise Darstellen des zweiten Codes anpassen. Wie sehen denn deine bisherigen Versuche dazu aus?
Ansonsten sind die Varnamen in der Tat oft nicht wirkliche Bezeichner, was es schwierig macht den Code zu verstehen.
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

Xeres

Moderator

BeitragFr, Okt 24, 2014 0:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hauptspiel:
Nochmal zur Benennung: Zeilennummern nehmen von oben nach unten zu (y), Spaltennummern nehmen von links nach rechts zu ->
BlitzBasic: [AUSKLAPPEN]
Dim mapFeld.mapTile(10,15)

For mpt_zeile = 0 To 10
For mpt_spalte = 0 To 15
mapFeld(mpt_zeile,mpt_spalte) = [...]
Next
Next

;--->

Const Spalten = 10
Const Zeilen = 15
Dim mapFeld.mapTile(Spalten,Zeilen)

For zeile = 0 To Zeilen
For spalte = 0 To Spalten
mapFeld(spalte,zeile) = [...]
Next
Next


Was mir bei den Funktionen auffällt:
BlitzBasic: [AUSKLAPPEN]
Global Absschnitt = 1
Global AbschnittDatei$
Global a$

Dim AbschnittFeld(10,15)

Function Abschnitt_laden()

zeile = 0
spalte = 0
a = ""
AbsschnittDatei = ReadFile("Abschnitte/A"+Absschnitt+".abs")

For Zeile = 0 To 10
a = ReadLine(AbsschnittDatei)
For Spalte = 0 To 15
AbschnittFeld(Zeile,Spalte) = Mid$(a,Spalte+1,1)
Next
Next

CloseFile AbsschnittDatei

End Function

Funktionen sind dafür gedacht, Code zu Kapseln - globale Variablen widersprechen diesem Prinzip. Je mehr globale Variablen man benutzt, desto schwieriger wird das Finden von Bugs, da Funktionen auf einmal von allem drumherum abhängen und nicht mehr nur von ihren Parametern.
Viele Parameter braucht die Funktion ja nicht! AbschnittDatei$ enthält ein Datei-handle und wie Bilder, Musik usw. ist das in BB ein Int. Genauso wie "a" wird sie nicht im globalen Scope gebraucht.
Gegen eine globale, die sich den aktuellen Abschnitt merkt, ist nichts ein zu wenden - nur sollte sie nicht hard in der Funktion stehen.
BlitzBasic: [AUSKLAPPEN]

Global Absschnitt = 1
Const Spalten = 10
Const Zeilen = 15

Dim AbschnittFeld(Spalten,Zeilen)

Function Abschnitt_laden( abschnittNr%=1 )

Local spalte = 0
Local zeile = 0
Local datei = ReadFile("Abschnitte/A"+abschnittNr+".abs")

For zeile = 0 To Zeilen
Local textZeile$ = ReadLine(datei)
For spalte = 0 To Spalten
AbschnittFeld(spalte,zeile) = Mid$(textZeile, spalte+1, 1)
Next
Next

CloseFile(datei)

End Function

Schon mal besser. Jetzt fällt mir nur auf, dass die map_zuweisen() Funktion nochmal das Array durchgeht, um die eigentliche Karte zu modifizieren. Es kann sinnvoll sein, dass Laden vom Zuweisen zu trennen, wenn der Zugriff sehr lange dauert - aber da BB keine Threads beherrscht, bleibt das Programm so oder so stehen. Wink
Man könnte natürlich auch einen Cache basteln, der die Abschnitte vorhält, wenn sie schon einmal geladen wurden - aber falls nicht, könnte man auch beide Funktionen zusammen schreiben.

Bei map_zeichnen() würde ich beanstanden, dass die Funktion nicht nur etwas zeichnet, sondern auch die Koordinaten der Tiles neu setzt. Entweder die Tiles enthalten schon Pixelkoordinaten, oder man berechnet sie in den Schleifen - beides erscheint mir unnötig.

BlitzBasic: [AUSKLAPPEN]

Function map_zeichnen()

Local zeile, spalte

For zeile = 0 To Zeilen
For spalte = 0 To Spalten
Local feld.mapTile = mapFeld(spalte,zeile)
DrawImage(feld\tile, feld\x, feld\y)
Next
Next

End Function

; oder

Const TileSize = 64
Function map_zeichnen()

Local zeile, spalte

For zeile = 0 To Zeilen
For spalte = 0 To Spalten
DrawImage(mapFeld(spalte,zeile)\tile, spalte*TileSize, zeile*TileSize)
Next
Next

End Function


Ich würde noch den Spieler in einen Type stecken - dann hat man alle relevanten Informationen in einer Struktur. Davon ab musst du ja nur die eine Steuerung mit der anderen ersetzen - wenn die Umgebung gleich funktioniert.

Gib Bescheid, falls es nicht klappt und ansonsten viel Erfolg!
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Krumu1201

BeitragFr, Okt 24, 2014 1:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Kritiken und Verbesserungsvorschläge. Werde mich am Wochenende mal dran setzen und den code neu schreiben mit den Verbesserungen.

Gruß

Krumu1201
 

CO2

ehemals "SirMO"

BeitragFr, Okt 24, 2014 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine Frage war doch - wenn ich es richtig verstanden habe - folgende: Du hast ein Testprogramm geschrieben, in dem du simpel eine Tilemap via DataSchlagmichtot lädst. Dort funktioniert die Kollision der Map mit dem Spieler einwandfrei und die Bewegung des Spielers "sieht auch gut aus".
In deinem eigentlichen Projekt lädst du die Daten der Tilemap komplizierter und deswegen funktioniert die Kollision nicht. Zudem sieht die Bewegung des Spielers unschön aus?

Sollte das soweit korrekt verstanden sein, habe ich folgende Vorschläge:
- Füge deinem MapType eine Variable Kollision hinzu, die auf TRUE steht, falls es sich um ein Kollisionstile handelt und auf FALSE steht, wenn es ein normales Tile ist.
- Darauf basierend schreibe am besten eine Funktion, die zwei Parameter: x und y erwartet und dann TRUE oder FALSE returned je nach Wert des MapType-Variablen.
- In deinem Testprogramm wurde die Bewegung mit KeyDown() gemacht: Solange die entsprechende Taste gedrückt wird, wird der Code in der If() ausgeführt. In deinem richtigen Projekt schreibst du aber KeyHit(), was zur Folge hat, dass du die Tasten "hämmern" musst, um eine flüssige Bewegung hinzubekommen (Wenn die Taste gedrückt wurde (die Dauer ist egal), dann führe einmal den Code in der If() aus). Ist das gewollt?
- Du kannst deine MapDaten auch über WriteByte, bzw. WriteInt und ReadByte, bzw. ReadInt speichern/lesen, dann musst du nicht mit dem String und mit Mid() rumfentern.
BlitzBasic: [AUSKLAPPEN]
AbschnittFeld(Zeile,Spalte) = Mid$(A,Spalte+1,1) 
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
 

Krumu1201

Betreff: Fragen

BeitragMo, Okt 27, 2014 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe mich am Wochenende mal hingesetzt und versucht ein paar Sachen umzusetzen: viel hingekriegt nicht, aber fragen sind aufgetaucht.

Erstmal nur zum Minirpg (andere kommt hoffentlich später Very Happy )

1.variablen zu map array local machen?
2.wie spieler type ansprechen ohne dim feld?
mache es im moment so:

Code: [AUSKLAPPEN]

Type spieler
 Field spielerBild
 Field spielerFrame
 Field spielerRichtung$
 Field spielerPositionX
 Field spielerPositionY
 Field spielerGeschwindigkeit
 Field spielerGeschwindigkeitMaximum
End Type
   
   
Dim spielerfeld.spieler(0)
   
spielerfeld(0)= New spieler
spielerfeld(0)\spielerPositionX = 64
spielerfeld(0)\spielerPositionY = 128
spielerfeld(0)\spielerGeschwindigkeit = 2
spielerfeld(0)\SpielerRichtung$ = "rechts"



3.TILE_TYPE_FREE,TILE_SIZE,KEY_DOWN usw. als Konstanten machen?

Gruß

Krumu1201

Xeres

Moderator

BeitragMo, Okt 27, 2014 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Arrays gibt es in BB nur in zwei verschieden blöden Varianten.
- Dim Arrays sind immer global, können aber neu in anderer Größe definiert werden.
- Blitzarrays werden in der form BlitzBasic: [AUSKLAPPEN]
Local felder%[10]
deklariert und müssen eine Konstante Größe besitzen...
Beides nicht toll, aber ich würde bei der Dim Variante bleiben.

Types sind so ähnlich wie Datentypen: Man kann jede Variable die ein % oder $ bekommt stattdessen auch als Type deklarieren.

BlitzBasic: [AUSKLAPPEN]
Type TPlayer
Field Bild, Frame
;usw.
End Type


Global Player.TPlayer = New TPlayer
Player\Bild = LoadImage( ... )

;der selbe spieler wie oben, weil es nur einen gibt
Local spieler.TPlayer = First TPlayer


Gegen einen globalen Spieler hätte ich nichts aus zu setzen - da die eine Variable viele andere kapselt (Bild, Frame, usw.) ist das so ziemlich am optimum von BB.

Und zu guter Letzt: alles zu constanten machen, was auch Konstant ist - von 0 und 1 vielleicht abgesehen (falls es Sinn macht, gibt es ja True und False z.B. wenn es nicht um Berechnungen geht).
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group