Map"blinkt"

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

snörkl

Betreff: Map"blinkt"

BeitragSo, Nov 26, 2006 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, wenn ich meinen spieler und meine map zeichne, klappt das zwar alles, aber die map "blinkt". Das heißt es ist immer kurz weiß, dann wieder die map, kurz weiß, dann wieder die map. Der debugger ist aus, kann also hoffentlich nicht am tempo liegen. Hier ist mein Code (man kann zwar wahrscheinlich ohne bilder nicht viel mit ihm anfangen, aber vielleicht hilft es euch weiter):

Code: [AUSKLAPPEN]
Global PlayerX=10 Global PlayerY=10
Global Playerfrm=1 Global Player$="right"

Graphics 640,480,16,1

Titlefont=LoadFont("Matura MT Script Capitals",72)
Arial=LoadFont("Arial",20)

SetFont titlefont
Color 0,120,0

Text 170,200,"mini_Shooter"
Delay 2000

Cls
SetFont arial

Repeat
 Text 305,224,"(S)tart"
 Text 305,250,"(E)nde"
 
 If KeyHit(18) Then End

Until KeyHit(31)

Dim map(20,15)

red_r_run_Soldat=LoadAnimImage("graphics\red_r_run_Soldat.png",28,50,0,7)
MaskImage red_r_run_Soldat,255,0,255
red_l_run_Soldat=LoadAnimImage("graphics\red_l_run_Soldat.png",28,50,0,7)
MaskImage red_l_run_Soldat,255,0,255
tileset = LoadAnimImage("graphics\tilemap.bmp",32,32,0,10)

 
load() ;lädt die map


ClsColor 255,255,255
Cls

Repeat

;Map1set
 
For x = 0 To 20
For y = 0 To 15
DrawImage tileset,x*32,y*32,map(x,y)
Next
Next

;Movement

 If KeyDown(205)
  Player$="right"
  DrawImage red_r_run_Soldat,PlayerX,PlayerY,Playerfrm
  Delay 100
  playerfrm=playerfrm+1
  PlayerX=PlayerX+5
 EndIf
 
 If KeyDown(203)
  player$="left"
  DrawImage red_l_run_Soldat,PlayerX,PlayerY,Playerfrm
  Delay 100
  Playerfrm=Playerfrm+1
  PlayerX=PlayerX-5
 EndIf
 
 If Not KeyDown(205) Or KeyDown(203)
  playerfrm=0
  If player$="right"
   DrawImage red_r_run_Soldat,PlayerX,PlayerY,playerfrm
   Delay 100
  EndIf
  If player$="left"
   DrawImage red_l_run_Soldat,playerX,PlayerY,playerfrm
   Delay 100 
  EndIf
 EndIf
 
 If Playerfrm=>7  Then Playerfrm=1
 
;/////////////////////////////////////////////////////////////////////////////////////////////////////

 
 
   


 If KeyHit(1) Then End

Forever 

End

Function load()
;einlesen der datei
karte$ = ReadFile("maps\map1.map")
;einlesen der array und der variable tile
For x = 0 To 20
For y = 0 To 15
tile = ReadLine(karte$)
map(x,y) = ReadInt(karte$)
Next
Next
;schließen der datei
CloseFile(karte$)
End Function


hoffe auf eine relativ rasche antwort, da ich schon lange darüber brüte^^

mfg
Snörkl

BladeRunner

Moderator

BeitragSo, Nov 26, 2006 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ql:setbuffer ql:backbuffer() direkt nach graphics.

Dann ein ql:flip ans ende deiner Mainloop.

edit: und das ql:cls auch in die Loop, entweder an den Anfang oder ans Ende, nach Flip
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
 

snörkl

BeitragSo, Nov 26, 2006 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
so, nun hab ichs also so gemacht :

Code: [AUSKLAPPEN]
Global PlayerX=10 Global PlayerY=10
Global Playerfrm=1 Global Player$="right"

Graphics 640,480,16,1

Titlefont=LoadFont("Matura MT Script Capitals",72)
Arial=LoadFont("Arial",20)

SetFont titlefont
Color 0,120,0

Text 170,200,"mini_Shooter"
Delay 2000

Cls
SetFont arial

Repeat
 Text 305,224,"(S)tart"
 Text 305,250,"(E)nde"
 
 If KeyHit(18) Then End

Until KeyHit(31)

Dim map(20,15)

red_r_run_Soldat=LoadAnimImage("graphics\red_r_run_Soldat.png",28,50,0,7)
MaskImage red_r_run_Soldat,255,0,255
red_l_run_Soldat=LoadAnimImage("graphics\red_l_run_Soldat.png",28,50,0,7)
MaskImage red_l_run_Soldat,255,0,255
tileset = LoadAnimImage("graphics\tilemap.bmp",32,32,0,10)

 
load() ;lädt die map


ClsColor 255,255,255
Cls

Repeat
SetBuffer BackBuffer()
;Map1set
 
For x = 0 To 20
For y = 0 To 15
DrawImage tileset,x*32,y*32,map(x,y)
Next
Next

;Movement

 If KeyDown(205)
  Player$="right"
  DrawImage red_r_run_Soldat,PlayerX,PlayerY,Playerfrm
  Delay 100
  playerfrm=playerfrm+1
  PlayerX=PlayerX+5
 EndIf
 
 If KeyDown(203)
  player$="left"
  DrawImage red_l_run_Soldat,PlayerX,PlayerY,Playerfrm
  Delay 100
  Playerfrm=Playerfrm+1
  PlayerX=PlayerX-5
 EndIf
 
 If Not KeyDown(205) Or KeyDown(203)
  playerfrm=0
  If player$="right"
   DrawImage red_r_run_Soldat,PlayerX,PlayerY,playerfrm
   Delay 100
  EndIf
  If player$="left"
   DrawImage red_l_run_Soldat,playerX,PlayerY,playerfrm
   Delay 100 
  EndIf
 EndIf
 
 If Playerfrm=>7  Then Playerfrm=1
 
;/////////////////////////////////////////////////////////////////////////////////////////////////////

 If KeyHit(1) Then End

 Flip
 Cls

Forever 

End

Function load()
;einlesen der datei
karte$ = ReadFile("maps\map1.map")
;einlesen der array und der variable tile
For x = 0 To 20
For y = 0 To 15
tile = ReadLine(karte$)
map(x,y) = ReadInt(karte$)
Next
Next
;schließen der datei
CloseFile(karte$)
End Function


die map wird nun kurz angezeigt, danach verschwindet sie und kommt nicht wieder xD^^- also wird sie nicht mehr angezeigt...

hoffe Du kannst mir wieder weiterhelfen

mfg
Snörkl

Edit:

Wenn ich das setbuffer backbuffer() direkt nach graphics schreibe wird mein spieletitel und das hauptmenü nicht mehr angezeigt

Blitzcoder

Newsposter

BeitragSo, Nov 26, 2006 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Global PlayerX=10 Global PlayerY=10
Global Playerfrm=1 Global Player$="right"

Graphics 640,480,16,1
setbuffer backbuffer()

Titlefont=LoadFont("Matura MT Script Capitals",72)
Arial=LoadFont("Arial",20)

SetFont titlefont
Color 0,120,0

Text 170,200,"mini_Shooter"
Delay 2000

Cls
SetFont arial

Repeat
 Text 305,224,"(S)tart"
 Text 305,250,"(E)nde"
 
 If KeyHit(18) Then End

Until KeyHit(31)

Dim map(20,15)

red_r_run_Soldat=LoadAnimImage("graphics\red_r_run_Soldat.png",28,50,0,7)
MaskImage red_r_run_Soldat,255,0,255
red_l_run_Soldat=LoadAnimImage("graphics\red_l_run_Soldat.png",28,50,0,7)
MaskImage red_l_run_Soldat,255,0,255
tileset = LoadAnimImage("graphics\tilemap.bmp",32,32,0,10)

 
load() ;lädt die map


ClsColor 255,255,255
Cls

Repeat
;Map1set
 
For x = 0 To 20
For y = 0 To 15
DrawImage tileset,x*32,y*32,map(x,y)
Next
Next

;Movement

 If KeyDown(205)
  Player$="right"
  DrawImage red_r_run_Soldat,PlayerX,PlayerY,Playerfrm
  Delay 100
  playerfrm=playerfrm+1
  PlayerX=PlayerX+5
 EndIf
 
 If KeyDown(203)
  player$="left"
  DrawImage red_l_run_Soldat,PlayerX,PlayerY,Playerfrm
  Delay 100
  Playerfrm=Playerfrm+1
  PlayerX=PlayerX-5
 EndIf
 
 If Not KeyDown(205) Or KeyDown(203)
  playerfrm=0
  If player$="right"
   DrawImage red_r_run_Soldat,PlayerX,PlayerY,playerfrm
   Delay 100
  EndIf
  If player$="left"
   DrawImage red_l_run_Soldat,playerX,PlayerY,playerfrm
   Delay 100
  EndIf
 EndIf
 
 If Playerfrm=>7  Then Playerfrm=1
 
;/////////////////////////////////////////////////////////////////////////////////////////////////////

 If KeyHit(1) Then End

 Flip
 Cls

Forever

End

Function load()
;einlesen der datei
karte$ = ReadFile("maps\map1.map")
;einlesen der array und der variable tile
For x = 0 To 20
For y = 0 To 15
tile = ReadLine(karte$)
map(x,y) = ReadInt(karte$)
Next
Next
;schließen der datei
CloseFile(karte$)
End Function
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)
 

snörkl

BeitragSo, Nov 26, 2006 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
öhm^^- wie gesagt, da wird mein hauptmenü nicht angezeigt, die karte auch nicht

BladeRunner

Moderator

BeitragSo, Nov 26, 2006 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Global PlayerX=10 Global PlayerY=10
Global Playerfrm=1 Global Player$="right"

Graphics 640,480,16,1
SetBuffer BackBuffer()
Titlefont=LoadFont("Matura MT Script Capitals",72)
Arial=LoadFont("Arial",20)

SetFont titlefont
Color 0,120,0

Text 170,200,"mini_Shooter"
Flip
Delay 2000


SetFont arial

Repeat
  Cls
 Text 305,224,"(S)tart"
 Text 305,250,"(E)nde"
 
 If KeyHit(18) Then End
 Flip
Until KeyHit(31)

Dim map(20,15)

red_r_run_Soldat=LoadAnimImage("graphics\red_r_run_Soldat.png",28,50,0,7)
MaskImage red_r_run_Soldat,255,0,255
red_l_run_Soldat=LoadAnimImage("graphics\red_l_run_Soldat.png",28,50,0,7)
MaskImage red_l_run_Soldat,255,0,255
tileset = LoadAnimImage("graphics\tilemap.bmp",32,32,0,10)

 
load() ;lädt die map


ClsColor 255,255,255


Repeat
Cls
;Map1set
 
For x = 0 To 20
For y = 0 To 15
DrawImage tileset,x*32,y*32,map(x,y)
Next
Next

;Movement

 If KeyDown(205)
  Player$="right"
  DrawImage red_r_run_Soldat,PlayerX,PlayerY,Playerfrm
  Delay 100
  playerfrm=playerfrm+1
  PlayerX=PlayerX+5
 EndIf
 
 If KeyDown(203)
  player$="left"
  DrawImage red_l_run_Soldat,PlayerX,PlayerY,Playerfrm
  Delay 100
  Playerfrm=Playerfrm+1
  PlayerX=PlayerX-5
 EndIf
 
 If Not KeyDown(205) Or KeyDown(203)
  playerfrm=0
  If player$="right"
   DrawImage red_r_run_Soldat,PlayerX,PlayerY,playerfrm
   Delay 100
  EndIf
  If player$="left"
   DrawImage red_l_run_Soldat,playerX,PlayerY,playerfrm
   Delay 100
  EndIf
 EndIf
 
 If Playerfrm=>7  Then Playerfrm=1
 
;/////////////////////////////////////////////////////////////////////////////////////////////////////

 If KeyHit(1) Then End

 Flip
 

Forever

End

Function load()
;einlesen der datei
karte$ = ReadFile("maps\map1.map")
;einlesen der array und der variable tile
For x = 0 To 20
For y = 0 To 15
tile = ReadLine(karte$)
map(x,y) = ReadInt(karte$)
Next
Next
;schließen der datei
CloseFile(karte$)
End Function


Du musst selbstredend flip und cls in all deinen Loops benutzen.
Was ich von der animation mittels Delay halte sag ich jetzt besser nicht. Du kennst ja millisecs().
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
 

snörkl

BeitragSo, Nov 26, 2006 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
jaa^^- werds noch ändern, habs halt gecodet als ich noch nichts drüber wusste Wink


...
edit

so wies jetzt ist zeigt er leider die map überhaupt nicht mehr an^^
 

snörkl

BeitragDi, Nov 28, 2006 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
hat denn nun noch irgendjemand hier eine idee? Liegt das einfach an der größe? Ist irgendwo im code eine speedbremse (das delay zwischen den frames hab ich schon rausgenommen und das ganze mit millisecs() gemacht)?
wenn ich mir andere games anschaue, dann haben die riesige maps, bei denen blinkts ja auch nicht^^
 

snörkl

BeitragMi, Nov 29, 2006 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
JAAA; GEWONNEN!!! TILEMAP VS ICH 0:1 XD

bin so glüücklich
endlich hab ichs geschafft Very Happy

und zwar musst ich meinen tiles nur eine transparenz (255,255,255 rgb) geben, dann gehts^^. Hab zwar keine ahnung warum, aber es klappt!

edit: richtiges thema^^

skey-z

BeitragMi, Nov 29, 2006 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
kennst du auch schon den edit Button?
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

snörkl

BeitragMi, Nov 29, 2006 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
klar^^- ich wollte es nur jetzt als abschluss schreiben, um zu sagen, ihr könnt den thread jetzt dichtmachen. Sonst hätte ich selbstverständlich den editbutton benutzt Wink

BladeRunner

Moderator

BeitragMi, Nov 29, 2006 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Für diese tiefschürfende Erkenntnis hätte es keinen Doppelpost gebraucht. Hätte Dir jemand potentiell antworten wollen hätte er auch so gesehen dass dein Problem schon gelöst ist.
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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group