Kartenrand beim Scrolling!?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Ironstorm

Erstklassiger Contest-Veranstalter

Betreff: Kartenrand beim Scrolling!?

BeitragFr, Apr 09, 2004 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi @ all!
Ich wollte wissen wie ich einen Rand mache! Also so sieht mein Code aus:
Code: [AUSKLAPPEN]

Graphics 1024,768
Setbuffer Backbuffer()
man = Loadimage("man.png")
map = Loadimage("map.png") ; Das Bild ist 2048,1536 groß!
X=400
Y=300
Xmap=0
Ymap=0
lauf=millisecs()
Repeat
Cls
drawimage map,Xmap-SX,Ymap-SY ;SX und SY ist das Scrolling!
drawimage man,X-SX,Y-SY

If keydown(200) and lauf+5 < millisecs() then
Y=Y-1
SY=SY-1
lauf=millisecs()
endif
flip
until keydown(1)

So und wie mache ich es jetzt das mein Typ am Rand der Karte stehen bleibt?
Helft mir bitte!!
THX im vorraus!
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium

dimaster

BeitragSa, Apr 10, 2004 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
So würde ich sagen:
Code: [AUSKLAPPEN]

 If X < 0 Then X = 0
 If X > 1000 Then X = 1000
 If Y < 0 Then Y = 0
 If Y > 700 Then Y = 700

kannst du einbauen!!
 

Gast

BeitragSa, Apr 10, 2004 15:37
Antworten mit Zitat
oh verdammt!

ich programmiere zwar noch nich lange blitz, hab aber mehr als 8 jahre qb programmiert und meine: machs lieber anders!!! wenn ichs richtig sehe lädst du die map in ein array und plazierst sie dann irgendwo in den minuszonen des pixelrasters...dank clipping geht das jah auch ohne probleme. aber das ist doch verdammt langsam. ich würd dir empfelen deine map zu tilen oder zumindest die zeichenprozedur zu ändern. du zeichnest immer die komplette karte, obwohl nur ein teil zu sehen ist. der teil der nicht zu sehen ist landet natürlich links, rechts, oben und unten vom bildschirmrand.

versteht das jemand?

cheers/mariuz

Michi1988

BeitragSo, Apr 11, 2004 2:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja natürlich.
ich würde es so machen:

Code: [AUSKLAPPEN]

      For x=0 To x_K
      For y=0 To y_K
         If x*64+a<=800 And x*64+a+64>=0 And y*64+b<=600 And y*64+b+64>=0 Then
            DrawImage terrain,x*64+a,y*64+b,Layer1(x,y)
            Color 255,0,0
            Rect x*64+a,y*64+b,64,64,0
            Color 255,255,255
            Text x*64+32+a,y*64+32+b,x+" / "+y,1,1
         End If
      Next
      Next


So wird das jeweilige Tile nur gezeichnet, wenn es wirklich zu sehen ist und der Rest der MAP word ausgeblendet bzw. nicht gedrawt.

dimaster

BeitragSo, Apr 11, 2004 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
ist das nich einbischen gross dein Bild was soll es denn werden ein RPG,
ein Jump n` run oder was?
wenn es ein Rpg ist würde ich es so oder mit einem map Editor machen:
Code: [AUSKLAPPEN]

graphics 640,480,16,1
setbuffer backbuffer()
;Grafiken laden
char = loadimage("Char.bmp")
map = loadanimimage("Tileset.bmp",32,32,0,6)
px = 7
py = 10
move = 1
;Map zeichnen
dim level(20,20)
Data 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,5,5,5,5,5,5,5,0,0,5,5,5,5,5,5,5,5,5,5,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5
Data 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5

for y = 0 to 20
for x = 0 to 20
read level(x,y)
next
next

repeat
cls
;alles zeichnen
for y = 0 to 20
for x = 0 to 20
drawimage map,x*32-scrollx,y*32-scrolly,level(x,y)
next
next

;Steuerung

If KeyDown(208) Then
If map(px,py+1) < 2 Then
py = py + 1
scrolly = scrolly +32
move = 1
endif
endif

If KeyDown(200) Then
If map(px,py-1) < 2 Then
py = py - 1
scrolly = scrolly -32
move = 1
endif
endif

If KeyDown(205) Then
If map(px+1,py) < 2 Then
px = px + 1
scrollx = scrollx +32
move = 1
endif
endif

If KeyDown(203) Then
If map(px-1,py) < 2 Then
px = px - 1
scrollx = scrollx -32
move = 1
endif
endif

If move = 1 Then x = px * 32: y = py * 32:DrawImage char,x-scrollx,y-scrolly: Delay 50

Flip
until keyhit(1)





die Kollisionen sind da schon eingebaut!!Mal irgend ein char und dann tiles die du aneinander hängest.Sie sollten 32*32 sein.

wenn du ein Jump an run machst wäre das etwa so

Code: [AUSKLAPPEN]

Graphics 640,480
SetBuffer BackBuffer()
timer = CreateTimer(10)
tiles = LoadImage("map.bmp")
figuren = LoadImage("char.bmp")

Dim Level(14,69)
leveldatei = ReadFile("level.dat")
For Spalte = 0 To 69
 A = ReadByte(leveldatei) - 48
 For Zeile = 0 To A
  Level(10 - Zeile, Spalte) = A
 Next
Next
Ende = 69

For Zeile = 10 To 14
 For Spalte = 0 To 69
  Level(Zeile,Spalte) = 99
 Next
Next

Spruenge = 4
Dim Sprungweite(Spruenge)
For I=1 To Spruenge
 Read Sprungweite(I)
Next
Data -1, -1, -1, -1

ClsColor 127,127,255
Index = 0
SpielerZ = 9
SpielerS = 7

Repeat
 Cls

 If KeyDown(57) And Sprung=0 Then
   If Level(SpielerZ + 1, SpielerS+Index) <> 0 Then Sprung = 1
 End If

 If Sprung > 0 Then
  If Level(SpielerZ + Sprungweite(Sprung), SpielerS+Index) <> 0 Then
   Sprung = 0
  Else
   SpielerZ = SpielerZ + Sprungweite(Sprung)
   Sprung = Sprung + 1
   If Sprung = Spruenge + 1 Then Sprung = 0
  EndIf
 EndIf

; Fallen, wenn kein Boden unter den Füßen
 If Sprung = 0 Then
  If Level(SpielerZ + 1,SpielerS+Index) = 0 Then
    SpielerZ = SpielerZ + 1
  End If
 EndIf

; Spielfigur nach rechts bewegen
 If KeyDown(205) And Level(SpielerZ,SpielerS+1+Index) = 0 Then ; Rechts
  If SpielerS + Index < Ende Then
   SpielerS = SpielerS + 1
  End If
 EndIf

; Spielfigur nach links bewegen
 If KeyDown(203) And Level(SpielerZ,SpielerS-1+Index) = 0 Then ; Links
;  If SpielerS > 0 Then
  If SpielerS + Index > 1 Then
   SpielerS = SpielerS - 1
  End If
 EndIf

; Scrollen, wenn der Spieler am rechten Rand ist
 If SpielerS > 15 Then
   If Index < Ende - 19 Then
     Index = Index + 1
     SpielerS = SpielerS - 1
   End If
 End If

; Scrollen, wenn der Spieler am linken Rand ist
 If SpielerS < 5 Then
   If Index > 0 Then
     Index = Index - 1
     SpielerS = SpielerS + 1
   End If
 End If

; Level zeichnen
 For Spalte = Index To Index + 19
  For Zeile = 0 To 14
   A = Level(Zeile,Spalte)
   Select A
    Case 99      DrawImageRect tiles, (Spalte-Index)*32, Zeile*32, 172, 342, 32, 32
    Case 1       DrawImageRect tiles, (Spalte-Index)*32, Zeile*32, 2, 342, 32, 32
    Case 2       DrawImageRect tiles, (Spalte-Index)*32, Zeile*32, 444, 308, 32, 32
    Case 3,4,5,6 DrawImageRect tiles, (Spalte-Index)*32, Zeile*32, 444, 172, 32, 32
   End Select
  Next
 Next

 DrawImageRect figuren, SpielerS*32, SpielerZ*32, 481,142,32,26

 WaitTimer timer
 Flip
Until KeyHit(1)

_____________________________________________________________
Level.dat :

6000022004002233220000011001100222200110300000022200000123456542000006

_____________________________________________________________



die grafik musst du selber machen!!

Vieleicht hilfts.

Michi1988

BeitragSo, Apr 11, 2004 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
*g* ja 64,64 is nen bissl groß. Es ist ein Panzer Spiel mit dem man mit unendlich vielen Panzern im Netzwerk in einer 200x200 (je 64x64) Map rumfahren kann und andere Leute im Netz abschießen kann.
Is voll witzig. Ändere aber bald die Tilegröße auf 20,20 aber dann halt 600x600

dimaster

BeitragSo, Apr 11, 2004 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde 32 * 32 oder 16 * 16

Michi1988

BeitragSo, Apr 11, 2004 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
das is aber für die Spielauflösung von 800x600 Pixeln irgendwie ungeeignet.

dimaster

BeitragSo, Apr 11, 2004 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
hast du ein map editor oder hast dus so gemacht wie ich beim Beispiel?
Wenn du ein Mapeditor mit scrolling hast kannst du mir vieleicht sagen wies du gemacht hast??

Michi1988

BeitragMo, Apr 12, 2004 7:32
Antworten mit Zitat
Benutzer-Profile anzeigen
ich lasse per for-nest alles drawen und dann noch dazu

for
drawimage x+a,y+b
next

und dann halt verändere ich a und b.
 

Philipp91

BeitragDo, Apr 15, 2004 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
hey,ich hab keine ahnung Wink Smile

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group