editor total langsam ...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

cyby

Betreff: editor total langsam ...

BeitragDi, Apr 06, 2004 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,

ich habe jetzte einen editor und eine rpg engine gemacht, doch wenn man jetzte karten so mit der größe von 150*150 macht dann dauert das ein paar sekunden bis das flip durchgelaufen ist ....
weis wer wie man das schneller machen kann ?
noch ein hinweis zum editor:
-3layer - man wechselt mit den tasten 1-3 !
-mit "n" kann man eine neue karte erstellen
- mit F1 und F2 kann man speichern und laden ...
-wenn man beim speichern map eingibt ist das die karte wo geladen wird
noch ein hinweis zur rpg e. :
-man bewegt den player mit den pfeiltasten ....
die bilder und exe der sachen gibt es hier
game:
Code: [AUSKLAPPEN]
AppTitle "RPG Test"
;grafikmodus
Graphics 800,600,16,2
SetBuffer BackBuffer()

;<<<<<<<<<< tiles laden
Global tile1 = LoadImage("gfx\tiles\tile1.bmp")
Global tile2 = LoadImage("gfx\tiles\tile2.bmp")
Global tile3 = LoadImage("gfx\tiles\tile3.bmp")
Global tile4 = LoadImage("gfx\tiles\tile4.bmp")

;<<<<<<<<<< andere bilder laden
Global player_anim = LoadAnimImage("anim1.bmp",24,32,0,11)
MaskImage player_anim,32,156,0
Global movemodus = 0

;tile kordinaten
Global tilex = 32
Global tiley = 32
;map kordinaten
Global map1x
Global map1y
;scrolling
Global scrolling_speed = 4
scrolling2x = 2
scrolling2y = 2
Global scrollingx = scrolling2x*tilex
Global scrollingy = scrolling2y*tiley
;player kordinaten
Global playerx = 8
Global playery = 8
Global player2x = playerx-scrolling2x;die hintergrund pos vom player
Global player2y = playery-scrolling2y;die hintergrund pos vom player
Global move_gehen = 2 ;2 = ja ;1 = nein
Global move_player = 0
;tasten
Global up_key = 200
Global down_key = 208
Global right_key = 205
Global left_key = 203

;die map1 laden ...
datei = ReadFile("maps/map.map")
map1x = ReadInt(datei)
map1y = ReadInt(datei)

Dim map1_l1(map1x,map1y);layer1 - unter dem spieler
Dim map1_l2(map1x,map1y);layer2 - selbe höhe wie der spieler
Dim map1_l3(map1x,map1y);layer3 - über dem spieler

For y = 0 To map1y-1
 For x = 0 To map1x-1
  map1_l1(x,y) = ReadInt(datei)
  map1_l2(x,y) = ReadInt(datei)
  map1_l3(x,y) = ReadInt(datei)
 Next
Next
CloseFile(datei)
;#########################################################################
;################# mainloop ##############################################
;#########################################################################
Repeat
Cls

layer1()
layer2()
DrawImage player_anim,playerx*tilex,playery*tiley,frame
layer3()

If KeyHit(1) Then ende()

;#########################################################################
;#########################################################################
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< player animation
zeit = MilliSecs()
If zaelerstart + 150 < MilliSecs() Then

 If movemodus = 1 Then ;hoch
 If frame > 2 Then frame = 0
 If frame = 2 Then frame = 0
 frame = frame + 1
 zaelerstart = MilliSecs()
 EndIf

 If movemodus = 2 Then ;rechts
 If frame > 5 Then frame = 3
 If frame < 3 Then frame = 3
 If frame = 5 Then frame = 3
 frame = frame + 1
 zaelerstart = MilliSecs()
 EndIf

 If movemodus = 3 Then ;runter
 If frame > 8 Then frame = 5
 If frame < 5 Then frame = 5
 If frame = 8 Then frame = 5
 frame = frame + 1
 zaelerstart = MilliSecs()
 EndIf

 If movemodus = 4 Then ;links
 If frame > 10 Then frame = 8
 If frame < 8 Then frame = 8
 If frame = 10 Then frame = 8
 frame = frame + 1
 zaelerstart = MilliSecs()
 EndIf
EndIf

;#########################################################################
;####################### moveplayer ######################################
;<<<<<<<<<< player steuerrung
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< hoch
If KeyDown(down_key) And map1_l2(player2x,player2y+1) = 0
If move_gehen = 2 Then
move_gehen = 1
move_player = 1
EndIf
EndIf
;bewegen mit move
If move_player = 1 Then ;move_player1
If move_gehen = 1
scrollingy = scrollingy - scrolling_speed
xo = xo + scrolling_speed
movemodus = 3  ;charakter animation
If xo = tiley Then
move_player = 0
movemodus = 0
player2y = player2y + 1
move_gehen = 2
xo = 0
EndIf
End If
End If
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< runter
If KeyDown(up_key) And map1_l2(player2x,player2y-1) = 0
If move_gehen = 2 Then
move_gehen = 1
move_player = 2
EndIf
EndIf
;bewegen mit move
If move_player = 2 Then ;move_player2
If move_gehen = 1
scrollingy = scrollingy + scrolling_speed
xo = xo + scrolling_speed
movemodus = 1  ;charakter animation
If xo = tiley Then
move_player = 0
movemodus = 0
player2y = player2y - 1
move_gehen = 2
xo = 0
EndIf
End If
End If
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< rechts
If KeyDown(right_key) And map1_l2(player2x+1,player2y) = 0
If move_gehen = 2 Then
move_gehen = 1
move_player = 3
EndIf
EndIf
;bewegen mit move
If move_player = 3 Then ;move_player3
If move_gehen = 1
scrollingx = scrollingx - scrolling_speed
xo = xo + scrolling_speed
movemodus = 2  ;charakter animation
If xo = tilex Then
move_player = 0
movemodus = 0
player2x = player2x + 1
move_gehen = 2
xo = 0
EndIf
End If
End If

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< links
If KeyDown(left_key) And map1_l2(player2x-1,player2y) = 0
If move_gehen = 2 Then
move_gehen = 1
move_player = 4
EndIf
EndIf
;bewegen mit move
If move_player = 4 Then ;move_player4
If move_gehen = 1
scrollingx = scrollingx + scrolling_speed
xo = xo + scrolling_speed
movemodus = 4  ;charakter animation
If xo = tilex Then
move_player = 0
movemodus = 0
player2x = player2x - 1
move_gehen = 2
xo = 0
EndIf
End If
End If


;variale
Color 255,0,0
Text 10,10,"xo"+xo
Text 10,30,"moveplayer"+move_player
Text 10,50,"move_gehen"+move_gehen
Text 10,70,"player2y"+player2y
Text 10,90,"player2x"+player2x
;################### ende move player ####################################
;#########################################################################

Flip(1)
Forever

;########################## layer1 zeichnen ##############################
Function layer1()
For y = 0 To map1y-1
 For x = o To map1x-1
  Select map1_l1(x,y)
   Case 1
   DrawImage tile1,x*tilex+scrollingx,y*tiley+scrollingy
   Case 2
   DrawImage tile2,x*tilex+scrollingx,y*tiley+scrollingy
   Case 3
   DrawImage tile3,x*tilex+scrollingx,y*tiley+scrollingy
   Case 4
    DrawImage tile4,x*tilex+scrollingx,y*tiley+scrollingy
  End Select
 Next
Next
End Function
;########################## layer2 zeichnen ##############################
Function layer2()
For y = 0 To map1y-1
 For x = o To map1x-1
  Select map1_l2(x,y)
   Case 1
   DrawImage tile1,x*tilex+scrollingx,y*tiley+scrollingy
   Case 2
   DrawImage tile2,x*tilex+scrollingx,y*tiley+scrollingy
   Case 3
   DrawImage tile3,x*tilex+scrollingx,y*tiley+scrollingy
   Case 4
    DrawImage tile4,x*tilex+scrollingx,y*tiley+scrollingy
  End Select
 Next
Next
End Function
;########################## layer3 zeichnen ##############################
Function layer3()
For y = 0 To map1y-1
 For x = o To map1x-1
  Select map1_l3(x,y)
   Case 1
   DrawImage tile1,x*tilex+scrollingx,y*tiley+scrollingy
   Case 2
   DrawImage tile2,x*tilex+scrollingx,y*tiley+scrollingy
   Case 3
   DrawImage tile3,x*tilex+scrollingx,y*tiley+scrollingy
   Case 4
    DrawImage tile4,x*tilex+scrollingx,y*tiley+scrollingy
  End Select
 Next
Next
End Function

;###################### ende #############################################
Function ende()
FreeImage tile1
FreeImage tile2
FreeImage tile3
FreeImage tile4
End
End Function

editor:
Code: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()
 
;<<<<<<<<<< tiles laden
Global tile1 = LoadImage("gfx\tiles\tile1.bmp")
Global tile2 = LoadImage("gfx\tiles\tile2.bmp")
Global tile3 = LoadImage("gfx\tiles\tile3.bmp")
Global tile4 = LoadImage("gfx\tiles\tile4.bmp")

Global tilex = 32
Global tiley = 32

Global mapx
Global mapy

Color 255,0,0
.karte_groesse
FlushKeys
Locate 10,10 : mapx = Input("KarteX : ")
Text 10,30,mapx
FlushKeys
Locate 10,50 :mapy = Input("KarteY : ")
Text 10,70,mapy

Global scrollingx
Global scrollingy
Global scrolling_speed = 32

Global layer = 1;gibt den layer

Dim mapl1(mapx,mapy)
Dim mapl2(mapx,mapy)
Dim mapl3(mapx,mapy)

Global tile = 2;welches tile mal setzten will...

For y = 0 To mapy-1
 For x = 0 To mapx-1
  mapl1(x,y) = 1
  mapl2(x,y) = 0
  mapl3(x,y) = 0
 Next
Next

Repeat
Cls

mx = MouseX()
my = MouseY()


;save
If KeyHit(59) Then
 Locate 50,300
 FlushKeys
 save(Input("Speichername: "))
 FlushKeys
End If
;load
If KeyHit(60) Then
 Locate 50,300
 FlushKeys
 load(Input("Ladename: "))
 FlushKeys
End If
; neu
If KeyHit(49)
datei1 = WriteFile("maps\sicherheits_kopie.map")
WriteInt(datei1,mapx)
WriteInt(datei1,mapy)
For y = 0 To mapy-1
 For x = 0 To mapx-1
  WriteInt(datei1,mapl1(x,y))
  WriteInt(datei1,mapl2(x,y))
  WriteInt(datei1,mapl3(x,y))
 Next
Next
CloseFile(datei1)
Goto karte_groesse
EndIf


layer1()
layer2()
layer3()

;maustase
If mx > 0 And mx < 800 And my > 0 And my < 400
If MouseDown(1) ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< linke
If layer = 1 Then mapl1((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = tile
If layer = 2 Then mapl2((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = tile
If layer = 3 Then mapl3((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = tile
EndIf
If MouseDown(2) ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< rechts
If layer = 1 Then mapl1((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = 0
If layer = 2 Then mapl2((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = 0
If layer = 3 Then mapl3((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = 0
EndIf
EndIf
 


Color 255,0,0
Rect 0,410,800,170

info()

;layer wechseln
If KeyHit(2) Then layer = 1
If KeyHit(3) Then layer = 2
If KeyHit(4) Then layer = 3
;scrolling
If KeyDown(205) Then scrollingx = scrollingx - scrolling_speed ;rechts
If KeyDown(200) Then scrollingy = scrollingy + scrolling_speed ;hoch
If KeyDown(203) Then scrollingx = scrollingx + scrolling_speed ;links
If KeyDown(208) Then scrollingy = scrollingy - scrolling_speed ;runter


;##############################################################
If mx > 100 And mx < 100 + 32 And my > 420 And my < 420 + 32
If MouseHit(1) Then  tile = 1
EndIf

If mx > 132 And mx < 132 + 32 And my > 420 And my < 420 + 32
If MouseHit(1) Then tile = 2
EndIf

If mx > 164 And mx < 164 + 32 And my > 420 And my < 420 + 32
If MouseHit(1) Then tile = 3
EndIf

If mx > 196 And mx < 196 + 32 And my > 420 And my < 420 + 32
If MouseHit(1) Then tile = 4
EndIf
;############################################################


Flip(0)
Until KeyHit(1)
End

;<<<<<<<<<<<<<<<<<<<<<<<<< info
Function info()
Color 0,0,255
Text 10,420,"Tile:"+tile ;welches tile ist gerade ?
If tile = 1 Then DrawImage tile1,10,440 ;tile zeichnen
If tile = 2 Then DrawImage tile2,10,440
If tile = 3 Then DrawImage tile3,10,440
If tile = 4 Then DrawImage tile4,10,440
Text 10,480,"Layer:"+layer;gibt an welcher layer aktiv ist

;auswählen



   ;<<<<<<<<<<<<<<
   
   
DrawImage tile1,100,420
DrawImage tile2,132,420
DrawImage tile3,164,420
DrawImage tile4,196,420
If ImageRectCollide(tile1,100,420,0,mx,my,5,5) Then End
End Function
;<<<<<<<<<<<<<<<<<<<<<<< layer1
Function layer1()
For y = 0 To mapy-1
 For x = 0 To mapx-1
  Select mapl1(x,y)
   Case 1
    DrawImage tile1,x*tilex+scrollingx,y*tiley+scrollingy
   Case 2
    DrawImage tile2,x*tilex+scrollingx,y*tiley+scrollingy
   Case 3
    DrawImage tile3,x*tilex+scrollingx,y*tiley+scrollingy
   Case 4
    DrawImage tile4,x*tilex+scrollingx,y*tiley+scrollingy
  End Select
 Next
Next
End Function
;<<<<<<<<<<<<<<<<<<<< layer2
Function layer2()
For y = 0 To mapy-1
 For x = 0 To mapx-1
  Select mapl2(x,y)
   Case 1
    DrawImage tile1,x*tilex+scrollingx,y*tiley+scrollingy
   Case 2
    DrawImage tile2,x*tilex+scrollingx,y*tiley+scrollingy
   Case 3
    DrawImage tile3,x*tilex+scrollingx,y*tiley+scrollingy
   Case 4
    DrawImage tile4,x*tilex+scrollingx,y*tiley+scrollingy
  End Select
 Next
Next
End Function
;<<<<<<<<<<<<<<<<<< layer3
Function layer3()
For y = 0 To mapy-1
 For x = 0 To mapx-1
  Select mapl3(x,y)
   Case 1
    DrawImage tile1,x*tilex+scrollingx,y*tiley+scrollingy
   Case 2
    DrawImage tile2,x*tilex+scrollingx,y*tiley+scrollingy
   Case 3
    DrawImage tile3,x*tilex+scrollingx,y*tiley+scrollingy
   Case 4
    DrawImage tile4,x*tilex+scrollingx,y*tiley+scrollingy
  End Select
 Next
Next
End Function
;<<<<<<<<<<<<<<<<< save
Function save(name_save$)

If name_save = "" Then
Else
datei1 = WriteFile("maps\"+Str(name_save)+".map")
WriteInt(datei1,mapx)
WriteInt(datei1,mapy)
For y = 0 To mapy-1
 For x = 0 To mapx-1
  WriteInt(datei1,mapl1(x,y))
  WriteInt(datei1,mapl2(x,y))
  WriteInt(datei1,mapl3(x,y))
 Next
Next
CloseFile(datei1)
EndIf
End Function
;<<<<<<<<<<<<<<< laden
Function load(name_load$)

If name_load = ""
 
Else
datei = ReadFile("maps/"+name_load+".map")
mapx = ReadInt(datei)
mapy = ReadInt(datei)

Dim mapl1(mapx,mapy)
Dim mapl2(mapx,mapy)
Dim mapl3(mapx,mapy)

For y = 0 To mapy-1
 For x = 0 To mapx-1
  mapl1(x,y) = ReadInt(datei)
  mapl2(x,y) = ReadInt(datei)
  mapl3(x,y) = ReadInt(datei)
 Next
Next
CloseFile(datei)

EndIf

End Function

der editor ist zwar nicht der beste, habe in aber auch nur am Sonntag geproggt ^^
THX

mfg cyby Very Happy

TheShadow

Moderator

BeitragDi, Apr 06, 2004 17:25
Antworten mit Zitat
Benutzer-Profile anzeigen
weißt du was clipping ist?

es wird nur der sichtbare Teil gezeichnet - du musst start x/y und end x/y der map berechnen und diesen Teil einzeichnen

Habe heir eine Karte mit 1000x1000 und läuft wie geschmiert...


For y = 0 To map1y-1
For x = o To map1x-1 ;<<<wieso machst du statt 0 buchstabe rein?
....
Next
Next

machst du zu:

For y = starty To endy
For x = startx To endx
....
Next
Next

wobei du startx,y und endx,y noch berechnen musst
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

cyby

BeitragDi, Apr 06, 2004 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit dem buchstabe war ein rechtschreibfehler Embarassed

also könnte man eigentlich beim editor scrollingx und scrollingy nehmen, also für das zeichnen
for scrollingx to scrollingx+20*32;die 20*32 für 20tiles mehr ..
for socrllingy to scorllingy+20*32;siehe oben ^^
;....
;...
next
next
?
 

cyby

BeitragDi, Apr 06, 2004 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm,
also muss man das startx,starty,endx,endy mit den scrollingdaten errechnen ?

theBlade

BeitragDi, Apr 06, 2004 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
als nächstes mach aus den drei dim-felder eins... den fehler hatte ich auch mal. kannst du zB so abspeichern

dim map(x,y,layer)

(nur n vorschlag)
"Ich bin wie ich bin. Die einen kennen mich, die anderen können mich." (Dr. Konrad Adenauer)

UTFSB -> (use the fuckin "suchen"-button)

User posted image <- link -.-
 

Dreamora

BeitragDi, Apr 06, 2004 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Und dann noch ne Dimension raus und dafür Types verwenden, damit die Felder problemlos und leicht verständlich erweitert werden können Smile
 

cyby

BeitragDi, Apr 06, 2004 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die Vorschläge !
hat wer noch Vorschläge ? dann bitte posten !
vom problem her mit dem clipping , kann mir da bitte wer mal weitere tips geben ^^ Very Happy ?

soweit wie ich das verstanden habe werden nur die tiles gezeichnet, die man auch sehen kann und der rest nicht, so das es schnelles scrolling gibt !?!?

mfg cyby Very Happy

ich wiederhole es nochmal, wenn ihr weite vorschläge vom code her habt, bitte posten ! sonst werde ich Crying or Very sad Wink
 

Dreamora

BeitragDi, Apr 06, 2004 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau das Smile

Du berechnest, welche Tiles überhaupt auf dem Schirm sind und nur die werden dann auch gezeichnet. Der Rest wird einfach aussen vor gelassen.

Die genaue Formel für das berechnen von Start / End x,y musst du dabei selber entwickeln. Es ist nicht schwer und eine gute Übung für bedeutend grössere Probleme die bald auf dich zukommen werden Smile
 

cyby

BeitragDo, Apr 08, 2004 7:56
Antworten mit Zitat
Benutzer-Profile anzeigen
habe jetzte mal einen kleinen testcode geschrieben, weis aber nicht genau wie die formel grob aussieht, kann mir wer vielleicht einen kleinen tip geben ... wäre nett Very Happy
Code: [AUSKLAPPEN]
Graphics 640,480,16,2
SetBuffer BackBuffer()

Locate 200,200:Print "Daten werden geladen ..."

;tile1 = LoadImage("gfx\tiles\tile1.bmp")

mapx = 10
mapy = 10

tilex = 32
tiley = 32

startx = 0
starty = 0
endex = startx+10
endey = starty+10

scrollingx = 0
scrollingy = 0

Dim map(mapx,mapy)

Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1
Data 1,1,1,1,1,1,1,1,1,1

For y = 0 To mapy-1
 For x = 0 To mapx-1
   Read map(x,y)
 Next
Next

Repeat
Cls

For y = starty To endey
 For x = startx To endex
  Select map(x,y)
   Case 1
   ;DrawImage tile1,x*tilex+scrollingx,y*tiley+scrollingy
   Color 255,0,0
   Rect x*tilex+scrollingx,y*tiley+scrollingy,tilex,tiley
  End Select
 Next
Next

If KeyDown(200) Then scrollingy = scrollingy - 5
If KeyDown(203) Then scrollingx = scrollingx - 5
If KeyDown(205) Then scrollingx = scrollingx + 5
If KeyDown(208) Then scrollingy = scrollingy + 5

Flip
Until KeyHit(1)
End

THX

mfg cyby Very Happy

Jan_

Ehemaliger Admin

BeitragDo, Apr 08, 2004 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein alter weißer herr hat gesagt, so geht das mit dem clipping:
Zitat:
Graphics 800,600 ,0,2
SetBuffer BackBuffer()

;<<<<<<<<<< tiles laden
Global tile1 = LoadImage("gfx\tiles\tile1.bmp")
Global tile2 = LoadImage("gfx\tiles\tile2.bmp")
Global tile3 = LoadImage("gfx\tiles\tile3.bmp")
Global tile4 = LoadImage("gfx\tiles\tile4.bmp")

Global tilex = 32
Global tiley = 32

Global mapx
Global mapy

Color 255,0,0
.karte_groesse
FlushKeys
Locate 10,10 : mapx = Input("KarteX : ")
Text 10,30,mapx
FlushKeys
Locate 10,50 :mapy = Input("KarteY : ")
Text 10,70,mapy

Global scrollingx
Global scrollingy
Global scrolling_speed = 32

Global layer = 1;gibt den layer

Dim mapl1(mapx,mapy)
Dim mapl2(mapx,mapy)
Dim mapl3(mapx,mapy)

Global tile = 2;welches tile mal setzten will...

For y = 0 To mapy-1
For x = 0 To mapx-1
mapl1(x,y) = 1
mapl2(x,y) = 0
mapl3(x,y) = 0
Next
Next

Repeat
Cls

mx = MouseX()
my = MouseY()


;save
If KeyHit(59) Then
Locate 50,300
FlushKeys
save(Input("Speichername: "))
FlushKeys
End If
;load
If KeyHit(60) Then
Locate 50,300
FlushKeys
load(Input("Ladename: "))
FlushKeys
End If
; neu
If KeyHit(49)
datei1 = WriteFile("maps\sicherheits_kopie.map")
WriteInt(datei1,mapx)
WriteInt(datei1,mapy)
For y = 0 To mapy-1
For x = 0 To mapx-1
WriteInt(datei1,mapl1(x,y))
WriteInt(datei1,mapl2(x,y))
WriteInt(datei1,mapl3(x,y))
Next
Next
CloseFile(datei1)
Goto karte_groesse
EndIf


layer1()
layer2()
layer3()

;maustase
If mx > 0 And mx < 800 And my > 0 And my < 400
If MouseDown(1) ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< linke
If layer = 1 Then mapl1((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = tile
If layer = 2 Then mapl2((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = tile
If layer = 3 Then mapl3((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = tile
EndIf
If MouseDown(2) ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< rechts
If layer = 1 Then mapl1((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = 0
If layer = 2 Then mapl2((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = 0
If layer = 3 Then mapl3((mx-scrollingx)/tilex,(my-scrollingy)/tiley) = 0
EndIf
EndIf



Color 255,0,0
Rect 0,410,800,170

info()

;layer wechseln
If KeyHit(2) Then layer = 1
If KeyHit(3) Then layer = 2
If KeyHit(4) Then layer = 3
;scrolling
If KeyDown(205) Then scrollingx = scrollingx - scrolling_speed ;rechts
If KeyDown(200) Then scrollingy = scrollingy + scrolling_speed ;hoch
If KeyDown(203) Then scrollingx = scrollingx + scrolling_speed ;links
If KeyDown(208) Then scrollingy = scrollingy - scrolling_speed ;runter


;##############################################################
If mx > 100 And mx < 100 + 32 And my > 420 And my < 420 + 32
If MouseHit(1) Then tile = 1
EndIf

If mx > 132 And mx < 132 + 32 And my > 420 And my < 420 + 32
If MouseHit(1) Then tile = 2
EndIf

If mx > 164 And mx < 164 + 32 And my > 420 And my < 420 + 32
If MouseHit(1) Then tile = 3
EndIf

If mx > 196 And mx < 196 + 32 And my > 420 And my < 420 + 32
If MouseHit(1) Then tile = 4
EndIf
;############################################################


Flip(1)
Until KeyHit(1)
End

;<<<<<<<<<<<<<<<<<<<<<<<<< info
Function info()
Color 0,0,255
Text 10,420,"Tile:"+tile ;welches tile ist gerade ?
If tile = 1 Then DrawImage tile1,10,440 ;tile zeichnen
If tile = 2 Then DrawImage tile2,10,440
If tile = 3 Then DrawImage tile3,10,440
If tile = 4 Then DrawImage tile4,10,440
Text 10,480,"Layer:"+layer;gibt an welcher layer aktiv ist

;auswählen



;<<<<<<<<<<<<<<


DrawImage tile1,100,420
DrawImage tile2,132,420
DrawImage tile3,164,420
DrawImage tile4,196,420
If ImageRectCollide(tile1,100,420,0,mx,my,5,5) Then End
End Function
;<<<<<<<<<<<<<<<<<<<<<<< layer1
Function layer1()
gh = GraphicsHeight()
gw = GraphicsWidth()
Xmax=gw/tilex
YMax=gh/tiley
For y = -(scrollingy/tiley) To Ymax-(scrollingy/tiley)
For x = -(scrollingx/tilex) To Xmax-(scrollingx/tilex)
If x >= 0 And x < Xmax Then
If y >= 0 And y < Ymax Then
Select mapl1(x,y)
Case 1
DrawBlock tile1,x*tilex+scrollingx,y*tiley+scrollingy
Case 2
DrawBlock tile2,x*tilex+scrollingx,y*tiley+scrollingy
Case 3
DrawBlock tile3,x*tilex+scrollingx,y*tiley+scrollingy
Case 4
DrawBlock tile4,x*tilex+scrollingx,y*tiley+scrollingy
End Select
End If
End If
Next
Next
End Function
;<<<<<<<<<<<<<<<<<<<< layer2
Function layer2()
gh = GraphicsHeight()
gw = GraphicsWidth()
Xmax=gw/tilex
YMax=gh/tiley
For y = -(scrollingy/tiley) To Ymax-(scrollingy/tiley)
For x = -(scrollingx/tilex) To Xmax-(scrollingx/tilex)
If x >= 0 And x < Xmax Then
If y >= 0 And y < Ymax Then
Select mapl2(x,y)
Case 1
DrawImage tile1,x*tilex+scrollingx,y*tiley+scrollingy
Case 2
DrawImage tile2,x*tilex+scrollingx,y*tiley+scrollingy
Case 3
DrawImage tile3,x*tilex+scrollingx,y*tiley+scrollingy
Case 4
DrawImage tile4,x*tilex+scrollingx,y*tiley+scrollingy
End Select
End If
End If
Next
Next
End Function
;<<<<<<<<<<<<<<<<<< layer3
Function layer3()
gh = GraphicsHeight()
gw = GraphicsWidth()
Xmax=gw/tilex
YMax=gh/tiley
For y = -(scrollingy/tiley) To Ymax-(scrollingy/tiley)
For x = -(scrollingx/tilex) To Xmax-(scrollingx/tilex)
If x >= 0 And x < Xmax Then
If y >= 0 And y < Ymax Then
Select mapl3(x,y)
Case 1
DrawImage tile1,x*tilex+scrollingx,y*tiley+scrollingy
Case 2
DrawImage tile2,x*tilex+scrollingx,y*tiley+scrollingy
Case 3
DrawImage tile3,x*tilex+scrollingx,y*tiley+scrollingy
Case 4
DrawImage tile4,x*tilex+scrollingx,y*tiley+scrollingy
End Select
End If
End If
Next
Next
End Function
;<<<<<<<<<<<<<<<<< save
Function save(name_save$)

If name_save = "" Then
Else
datei1 = WriteFile("maps\"+Str(name_save)+".map")
WriteInt(datei1,mapx)
WriteInt(datei1,mapy)
For y = 0 To mapy-1
For x = 0 To mapx-1
WriteInt(datei1,mapl1(x,y))
WriteInt(datei1,mapl2(x,y))
WriteInt(datei1,mapl3(x,y))
Next
Next
CloseFile(datei1)
EndIf
End Function
;<<<<<<<<<<<<<<< laden
Function load(name_load$)

If name_load = ""

Else
datei = ReadFile("maps/"+name_load+".map")
mapx = ReadInt(datei)
mapy = ReadInt(datei)

Dim mapl1(mapx,mapy)
Dim mapl2(mapx,mapy)
Dim mapl3(mapx,mapy)

For y = 0 To mapy-1
For x = 0 To mapx-1
mapl1(x,y) = ReadInt(datei)
mapl2(x,y) = ReadInt(datei)
mapl3(x,y) = ReadInt(datei)
Next
Next
CloseFile(datei)

EndIf

End Function
between angels and insects

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group