Tile Engine Frage

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

kog

Betreff: Tile Engine Frage

BeitragSo, Mai 07, 2006 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag wieder einmal ^^
Ich hätte da eine Frage, wie macht man es das man nicht im 32px Schritt läuft sondern im 1px schritt?
Hier ist mein code:
Code: [AUSKLAPPEN]
For player.player=Each player
   If player\id=1 Then
      For item.item=Each item
         If item\x=player\x And item\y=player\y Then
            collect(player\id, player\x, player\y, item\item)
         EndIf
      Next
      Exit
   End If
Next
For x=0 To 14
   For y=0 To 11
      map(x,y)=2
   Next
Next

For x=1 To 13
   For y=1 To 10
      map(x,y)=1
   Next
Next

For x=0 To 14
   For y=0 To 11
      DrawImage gfx_map,x*32,y*32,map(x,y)
   Next
Next

For x=1 To 13
   For y=1 To 10
      If fire(x,y)>0 Then
         If fire(x,y)=1 Then
            DrawImage gfx_map,x*32,y*32,6
         ElseIf fire(x,y)=2 Then
            DrawImage gfx_map,x*32,y*32,7
         ElseIf fire(x,y)=3 Then
            DrawImage gfx_map,x*32,y*32,8
         EndIf
      EndIf
   Next
Next

For item.item=Each item
   DrawImage gfx_item,item\x*32,item\y*32,item\item
Next

For bomb.bomb=Each bomb
   Text bomb\x*32,bomb\y*32-25,ms-bomb\bombtime
   DrawImage gfx_item,bomb\x*32,bomb\y*32,5
   
   If ms-bomb\bombtime>bomb\bombtimer Then
      For bx=-player\fire To player\fire
         del_item(player\id,bomb\x+bx,bomb\y)
         If bomb\x+bx>=0 And bomb\x+bx<=14*32 Then
            If map(bomb\x+bx,bomb\y)<>4 Then
               If bx=0 Then
                  fire(bomb\x+bx,bomb\y)=3
               Else
                  fire(bomb\x+bx,bomb\y)=2
               EndIf
            EndIf
         EndIf
      Next
      For by=-player\fire To player\fire
         del_item(player\id,bomb\x,bomb\y+by)
         If bomb\y+by>=0 And bomb\y+by<=11*32 Then
            If map(bomb\x,bomb\y+by)<>4 Then
               If by=0 Then
                  fire(bomb\x,bomb\y+by)=3
               Else
                  fire(bomb\x,bomb\y+by)=1
               EndIf
            EndIf
         EndIf
      Next
      Delete bomb
   EndIf
Next

For player.player=Each player
   If player\killed=0 Then
      DrawImage gfx_playerkopf,player\x*32,player\y*32-10
      DrawImage gfx_player,player\x*32,player\y*32
   Else
      DrawImage gfx_vehicle,450,player\y*32
   EndIf
Next


Code: [AUSKLAPPEN]
Function move(id, typ=0, send=1)
   If e_pause Or con Then Return 0
   Local ph=0
   For player.player=Each player
      If player\id=id Then
         ph=1
         Exit
      EndIf
   Next
   If Not ph Then Return 0
   
   Select typ
      Case 1
         If player\killed=0 Then
            If map(player\x,player\y+1)<>2 And map(player\x,player\y+1)<>4 Then
               If fire(player\x,player\y+1)=0 And player\killed=0 Then
                  player\y=player\y+player\speed
               Else
                  kill(player\id)
               EndIf
            EndIf
         Else
            If player\y<10 Then
               player\y=player\y+1
            EndIf
         EndIf
         
      Case 2
         If player\killed=0 Then
            If map(player\x,player\y-1)<>2 And map(player\x,player\y-1)<>4 Then
               If fire(player\x,player\y-1)=0 And player\killed=0 Then
                  player\y=player\y-player\speed
               Else
                  kill(player\id)
               EndIf
            EndIf
         Else
            If player\y>1 Then
               player\y=player\y-1
            EndIf
         EndIf
         
      Case 3
         If map(player\x-1,player\y)<>2 And map(player\x-1,player\y)<>4 Then
            If fire(player\x-1,player\y)=0 And player\killed=0 Then
               player\x=player\x-player\speed
            Else
               kill(player\id)
            EndIf
         EndIf
         
      Case 4
         If map(player\x+1,player\y)<>2 And map(player\x+1,player\y)<>4 Then
            If fire(player\x+1,player\y)=0 And player\killed=0 Then
               player\x=player\x+player\speed
            Else
               kill(player\id)
            EndIf
         EndIf
         
   End Select
End Function


player\speed ist gleich 1 momentan

Kryan

BeitragMo, Mai 08, 2006 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
also du kannst es erstmal mit floats versuchen

in der type-beschreibung hinter x und y und speed ein # machen
und player\speed auf 1/32 setzen

falls das keine gewünschten ergebnisse liefert wieder hier reinschreiben Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

kog

BeitragMo, Mai 08, 2006 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir leid aber wie meinst du das 1/32 setzen?

Kryan

BeitragMo, Mai 08, 2006 20:06
Antworten mit Zitat
Benutzer-Profile anzeigen
1 geteilt durch 32

wenn du willst kannst du es mit nem taschenrechner ausrechnen und dort das ergebnis eingeben

einfacher ist aber Code: [AUSKLAPPEN]
1/32
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

kog

BeitragMo, Mai 08, 2006 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm tut mir leid aber es geht nicht
ich denke ich muss eine neue Tile engine proggen, kennt jemand eine, die sowas schon Kann?
Open Source?

Kryan

BeitragMo, Mai 08, 2006 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
was n das für n schwachsinn??

Wenn dann musst DU es selbst programmieren

ne andere möglichkeit:

du speicherst immer player\x=173
also halt die pixel und nicht tiles

bei der kollisionsprüfung rechnest du dann player\x geteilt durch 32...
selbiges mit y machen!!
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

DerHase

BeitragMo, Mai 08, 2006 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
@Kryan: WAS?

@Kog: Kuck Dir dies hier mal an. Es ist nicht perfekt, aber versuch es zu verstehen wie es funktioniert und schreib dann Dein eigenes Scrolling.

BladeRunner

Moderator

BeitragMo, Mai 08, 2006 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich fände es nett wenn Du Deine Wortwahl etwas sorgfältiger triffst, Kryan. Du hast letzterdings den Hang dazu latent aggressiv und beleidigend zu sein.
Nimm Dich bitte ein wenig zurück, ja ?
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

kog

BeitragDi, Mai 09, 2006 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry aber ich kann damit nichts richtiges anfangen, ich werde kein scrolling brauchen

Lunatix

BeitragDi, Mai 09, 2006 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
kog hat Folgendes geschrieben:
Sry aber ich kann damit nichts richtiges anfangen, ich werde kein scrolling brauchen



Äh... und wie willst du dann den BildLauf hinbekommen?? (Ausser du arbeitest wie ich mit sprites -> (Mein Projekt), da könnte man theoritisch noch die Camera bewegen, aber selbst ich use Scrolling!
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

kog

BeitragDi, Mai 09, 2006 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
naja hast du dann einen vorschlag wie ich den Player da einbauen soll?
Das ist momentan noch mein einziges problem

Lunatix

BeitragDi, Mai 09, 2006 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Jop!

Mal ihn einfach immer bei GraphicsWidth()/2-(PlayerImageBreite/2),Graphicsheight()-100

Natürlich als letztes zeichen Very Happy
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group