Mein Game laggt - Was tun ???
Übersicht

![]() |
BaschdiBetreff: Mein Game laggt - Was tun ??? |
![]() Antworten mit Zitat ![]() |
---|---|---|
also das spiel unten laggt sobald man mehrer "Aliens" erstellt ich möchte wissen warum und was ich tun kann.....
thx im vorraus Code: [AUSKLAPPEN] ;# Const weight=640 Const height=480 Const tile=32 Graphics weight,height,16,1 SetBuffer BackBuffer() ;# Global mx,my,xback,yback,mapX=64,mapY=64,feld=2 Global gfx$="Graphic\",sfx$="Sound\",name$="map",nam$="map" ;# Global tileset = LoadAnimImage(gfx$+"tileset.bmp",tile,tile,0,60) Global human = LoadAnimImage(gfx$+"player.bmp",tile,tile,0,35) Global alien = LoadAnimImage(gfx$+"alien.bmp",tile,tile,0,35) Global Imouse = LoadImage(gfx$+"Imouse.bmp") Global mouse = LoadImage(gfx$+"mouse.bmp") ;# Dim map(mapX,mapY) ;# Type human Field x,y,xx,yy,xZ,yZ,nr,typ,sel,spe,liv,att End Type ;# Type alien Field x,y,xx,yy,xZ,yZ,nr,typ,sel,spe,liv,att Field move,xo,aa,px,py End Type ;# ;# ;# Main() Function Main() NewHuman(2*tile,2*tile,0) NewAlien(3*tile,5*tile,0) NewAlien(4*tile,5*tile,0) NewAlien(5*tile,5*tile,0) NewAlien(6*tile,5*tile,0) NewAlien(7*tile,5*tile,0) NewAlien(8*tile,5*tile,0) NewAlien(9*tile,5*tile,0) NewAlien(3*tile,6*tile,0) NewAlien(3*tile,7*tile,0) NewAlien(3*tile,8*tile,0) NewAlien(3*tile,9*tile,0) Repeat Cls ;BG malen For x=0 To mapX For y=0 To mapY DrawImage tileset,x*tile-xback,y*tile-yback,map(x,y) Next Next ;Unitsladen UpdateHuman() UpdateAlien() ;Maus malen UpdateMouse() Flip Until KeyHit(1) End End Function ;# ;# ;# Function LoadMap(name$) file=OpenFile("Level\"+name$+".map") For x=0 To mapX For y=0 To mapY map(x,y)=ReadInt(file) Next Next CloseFile file End Function ;# ;# ;# Function UpdateMouse() ;Scolling If KeyDown(200) And yback>0 Then: yback=yback-4 EndIf If KeyDown(208) And yback<mapY*tile-height Then: yback=yback+4 EndIf If KeyDown(205) And xback<mapX*tile-weight Then: xback=xback+4 EndIf If KeyDown(203) And xback>0 Then: xback=xback-4 EndIf ;Radar Color 192,192,192 Rect (weight-100)-10,10,100,100,1 Color 0,0,0 Rect ((weight-100)-10)+xback / ( (mapX * tile) / 100 ),10+yback / ( (mapY * tile) / 100 ), weight / ( (mapX * tile) / 100 ),height / ( (mapY * tile) / 100 ),0 ;Maus mx=MouseX() my=MouseY() DrawImage mouse,mx,my DrawImage Imouse,mx,my End Function ;# ;# ;# Function NewHuman(x,y,typ) hu.human=New human hu\xx=x hu\yy=y hu\xZ=hu\xx hu\yZ=hu\yy hu\typ=typ hu\spe=2 hu\liv=100 hu\att=5 End Function ;# ;# ;# Function UpdateHuman() For hu.human=Each human ;Bild Anzeigen hu\x=hu\xx-xback hu\y=hu\yy-yback DrawImage human,hu\x,hu\y,hu\nr ;Selektieren If ImagesCollide(mouse,mx,my,0,human,hu\x,hu\y,hu\nr)=1 And MouseDown(1) Then hu\sel=1 If ImagesCollide(mouse,mx,my,0,human,hu\x,hu\y,hu\nr)=0 And MouseDown(1) Then hu\sel=0 If hu\sel=1 Then Color 0,255,0 : Rect hu\x,hu\y,tile,tile,0 ;Zielkoos For x=0 To mapX For y=0 To mapY If hu\sel=1 And MouseDown(2) And ImagesCollide(mouse,mx,my,0,tileset,x*tile-xback,y*tile-yback,map(x,y)) Then hu\xZ=x*tile : hu\yZ=y*tile Next Next ;Bewegen If hu\xx < hu\xZ Then: hu\xx=hu\xx+hu\spe ElseIf hu\xx > hu\xZ Then: hu\xx=hu\xx-hu\spe EndIf If hu\yy < hu\yZ Then: hu\yy=hu\yy+hu\spe ElseIf hu\yy > hu\yZ Then: hu\yy=hu\yy-hu\spe EndIf Next End Function ;# ;# ;# Function NewAlien(x,y,typ) al.alien=New alien al\xx=x al\yy=y al\xZ=al\xx al\yZ=al\yy al\typ=typ al\spe=2 al\liv=100 al\att=5 End Function ;# ;# ;# Function UpdateAlien() For al.alien=Each alien ;Bild Anzeigen al\x=al\xx-xback al\y=al\yy-yback al\px=al\xx/tile al\py=al\yy/tile DrawImage alien,al\x,al\y,al\nr Text 0,0,""+al\px+" "+al\py ;Selektieren If ImagesCollide(mouse,mx,my,0,human,al\x,al\y,al\nr)=1 And MouseDown(1) Then al\sel=1 If ImagesCollide(mouse,mx,my,0,human,al\x,al\y,al\nr)=0 And MouseDown(1) Then al\sel=0 If al\sel=1 Then Color 0,255,0 : Rect al\x,al\y,tile,tile,0 ;Zielkoos For x=0 To mapX For y=0 To mapY If al\sel=1 And MouseDown(2) And ImagesCollide(mouse,mx,my,0,tileset,x*tile-xback,y*tile-yback,map(x,y)) Then al\xZ=x*tile : al\yZ=y*tile Next Next ;Bewegen ;oben-rechts laufen If al\xZ > al\xx And al\yZ < al\yy Then: If map(al\px+1,al\py-1)<feld And al\aa<1 Then: al\move=5 al\aa=1 EndIf ;unten-rechts laufen ElseIf al\xZ > al\xx And al\yZ > al\yy Then: If map(al\px+1,al\py+1)<feld And al\aa<1 Then: al\move=6 al\aa=1 EndIf ;unten-links laufen ElseIf al\xZ < al\xx And al\yZ > al\yy Then: If map(al\px-1,al\py+1)<feld And al\aa<1 Then: al\move=7 al\aa=1 EndIf ;oben-links laufen ElseIf al\xZ < al\xx And al\yZ < al\yy Then: If map(al\px-1,al\py-1)<feld And al\aa<1 Then: al\move=8 al\aa=1 EndIf ;Oben laufen ElseIf al\yZ < al\yy Then: If map(al\px,al\py-1)<feld And al\aa<1 Then: al\move=2 al\aa=1 EndIf ;Unten laufen ElseIf al\yZ > al\yy Then: If map(al\px,al\py+1)<feld And al\aa<1 Then: al\move=1 al\aa=1 EndIf ;rechts laufen ElseIf al\xZ > al\xx Then: If map(al\px+1,al\py)<feld And al\aa<1 Then: al\move=4 al\aa=1 EndIf ;links laufen ElseIf al\xZ < al\xx Then: If map(al\px-1,al\py)<feld And al\aa<1 Then: al\move=3 al\aa=1 EndIf EndIf ;pfeilhoch-taste If al\move = 2 Then al\nr=0 If al\aa > 0 al\yy = al\yy - 2 al\xo = al\xo + 1 If al\xo < 12 Then al\nr = 3 If al\xo < 8 Then al\nr = 2 If al\xo < 4 Then al\nr = 1 If al\xo = 16 Then al\aa = 0 : al\xo = 0:al\nr = 0 EndIf EndIf ;pfeilrechts-taste If al\move = 4 Then al\nr=4 If al\aa > 0 al\xx = al\xx + 2 al\xo = al\xo + 1 If al\xo < 12 Then al\nr = 7 If al\xo < 8 Then al\nr = 6 If al\xo < 4 Then al\nr = 5 If al\xo = 16 Then al\aa = 0 :al\xo = 0:al\nr = 4 EndIf EndIf ;pfeilrunter-taste If al\move = 1 Then al\nr=8 If al\aa > 0 al\yy = al\yy + 2 al\xo = al\xo + 1 If al\xo < 12 Then al\nr = 11 If al\xo < 8 Then al\nr = 10 If al\xo < 4 Then al\nr = 9 If al\xo = 16 Then al\aa = 0 : al\xo = 0:al\nr = 8 EndIf EndIf ;pfeillinks-taste If al\move = 3 Then al\nr=12 If al\aa > 0 al\xx = al\xx - 2 al\xo = al\xo + 1 If al\xo < 12 Then al\nr = 15 If al\xo < 8 Then al\nr = 14 If al\xo < 4 Then al\nr = 13 If al\xo = 16 Then al\aa = 0 : al\xo = 0:al\nr = 12 EndIf EndIf ;oben rechts If al\move = 5 Then al\nr=16 If al\aa > 0 al\xx = al\xx + 2 al\yy = al\yy - 2 al\xo = al\xo + 1 If al\xo < 12 Then al\nr = 19 If al\xo < 8 Then al\nr = 18 If al\xo < 4 Then al\nr = 17 If al\xo = 16 Then al\aa = 0 :al\xo = 0:al\nr = 16 EndIf EndIf ;unten rechts If al\move = 6 Then al\nr=20 If al\aa > 0 al\xx = al\xx + 2 al\yy = al\yy + 2 al\xo = al\xo + 1 If al\xo < 12 Then al\nr = 23 If al\xo < 8 Then al\nr = 22 If al\xo < 4 Then al\nr = 21 If al\xo = 16 Then al\aa = 0 :al\xo = 0:al\nr = 20 EndIf EndIf ;unten links If al\move = 7 Then al\nr=24 If al\aa > 0 al\xx = al\xx - 2 al\yy = al\yy + 2 al\xo = al\xo + 1 If al\xo < 12 Then al\nr = 27 If al\xo < 8 Then al\nr = 26 If al\xo < 4 Then al\nr = 25 If al\xo = 16 Then al\aa = 0 :al\xo = 0:al\nr = 24 EndIf EndIf ;oben links If al\move = 8 Then al\nr=28 If al\aa > 0 al\xx = al\xx - 2 al\yy = al\yy - 2 al\xo = al\xo + 1 If al\xo < 12 Then al\nr = 31 If al\xo < 8 Then al\nr = 30 If al\xo < 4 Then al\nr = 29 If al\xo = 16 Then al\aa = 0 :al\xo = 0:al\nr = 28 EndIf EndIf ;sterben Next End Function ;# ;# ;# |
||
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wieso das wohl lagt, da bin ich überfragt.
Ne jetzt Mal mit weniger zynismus: Warum genau gehst du ALLE Tyles durch für Kollision beim Update und das für jedes einzelne Alien und jeden Human? Das kann nur lagen, mit 10 aliens sind das 65*65*10 image collides ... Ich weiss zwar nicht genau was du damit erreichen willst, aber es definitiv ein sehr schlechter und extrem fehlerhafter Ansatz. Aus zweierlei Gründen: 1. Input und Update sollten nie in der gleichen Funktion sein. Splitte das Mal 2. Bestimme beim MouseDown die genauen Tilekoordinaten durch 2 Zeilen Mathematik. Dafür brauchst kein ImageCollide. auf der Robsite hats ein RPG Tutorial. Arbeit dich da mal durch um den Umgang mit Tilemaps zu erlernen. So wie du das machst hast du am Schluss sogar "negativ gewinn" beim nutzen von Tilemaps, da wärst du ohne besser beraten. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Baschdi |
![]() Antworten mit Zitat ![]() |
---|---|---|
jap das tut kenn ich ....thx aber was meinst du mit input und update splitten?
was ist was ? |
||
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden |
![]() |
Baschdi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If al\sel=1 And MouseDown(2) And map(Pmx,Pmy)<feld Then al\xZ=Pmx*tile : al\yZ=Pmy*tile also: Pmx=(mx+xback)/tile Pmy=(my+yback)/tile Das ich da net selbst drauf gekommen bin .,.....das slebe system hab ivh schon mal bei nem rpg genutzt ...danke es laggt nicht mehr stockt aber so komisch alle 2 sec .... |
||
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden |
![]() |
Baschdi |
![]() Antworten mit Zitat ![]() |
---|---|---|
ne schmarrn ich rede müll ..hatte was im hintergrund laufe...klar das es stockt ....![]() läuft einwandfrei ...ab jetzt fast keine for next schleifen mehr .... ![]() |
||
The_Baschdi@
Wer in Ogame is soll sofort zum Orden wechseln (D.O.) --- Alle Macht dem Orden |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
~GESCHLOSSEN~ Triplepost. Lass das sein. EDIT: Du wurdest schonmal darauf hingewiesen. Sollte sich das wiederholen gibt es eine Verwarnung. |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group