Kartenrand beim Scrolling!?
Übersicht

![]() |
IronstormErstklassiger Contest-VeranstalterBetreff: Kartenrand beim Scrolling!? |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
*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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich würde 32 * 32 oder 16 * 16 | ||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
das is aber für die Spielauflösung von 800x600 Pixeln irgendwie ungeeignet. | ||
![]() |
dimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hey,ich hab keine ahnung ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group