HeX0R hat geschrieben:Das kann ja nicht gehen.
Dein Sprite 4 ist mit 1024x1024 Pixel doch viel zu groß für den 800x600 Pixel Screen.
? Wiso meinst du is Sprite 4 1024x1024 pixel groß?
außerdem habe ich einen 1024x786 pixel Screen!
@NicTheQuick
Ich dachte eigentlich das is einfach son Pure basic problem, und ich wollt nicht erst wieder die ganzen graphiken usw hochladen.
Code: Alles auswählen
;************************************************* Konstanten *********************************************************
Global StartX ; X Koordinate des Startpunktes
Global StartY ; Y Koordinate des Startpunktes
Global ZielX ; X Koordinate des Zielpunktes
Global ZielY ; Y Koordinate des Zielpunktes
Global deltaX ; Differenz zwischen StartX und ZielX punkt
Global deltaY ; Differenz zwischen StartY und ZielY punkt
;************************************************* Procedures *********************************************************
Procedure Wegfindung3() ; Teilschleife von WegFindung() ; tritt ein wenn der Startpunkt links vom Zielpunkt liegt
deltaX*-1
For deltaX = 1 To (StartX-ZielX)*-1-1
DisplaySprite(2,StartX*64+(deltaX*64),StartY*64)
Next
Delay(100)
If deltaY = 0 ; Start und Zielpunkt liegen auf einer Wagerechten
Delay(100)
ElseIf deltaY > 0 ; Der Startpunkt liegt tiefer als der Zielpunkt
For deltaY = 1 To StartY-ZielY
DisplaySprite(3,ZielX*64,StartY*64-(deltaY*64))
Next
DisplaySprite(6,StartX*64,StartY*64)
DisplaySprite(5,ZielX*64,StartY*64)
Delay(100)
ElseIf deltaY < 0 ; Der Startpunkt liegt höhel als der Zielpunkt
deltaY*-1
For deltaY = 1 To (StartY-ZielY)*-1
DisplaySprite(3,ZielX*64,StartY*64+(deltaY*64))
Next
DisplaySprite(7,StartX*64,StartY*64)
DisplaySprite(4,ZielX*64,StartY*64)
Delay(100)
EndIf
EndProcedure
Procedure Wegfindung2() ; Teilschleife von WegFindung() ; tritt ein wenn der Startpunkt rechts vom Zielpunkt liegt
For deltaX = 1 To StartX-ZielX-1
DisplaySprite(2,StartX*64-(deltaX*64),StartY*64)
Next
Delay(100)
If deltaY = 0 ; Start und Zielpunkt liegen auf einer Wagerechten
Delay(100)
ElseIf deltaY > 0 ; Der Startpunkt liegt tiefer als der Zielpunkt
For deltaY = 1 To StartY-ZielY
DisplaySprite(3,ZielX*64,StartY*64-(deltaY*64))
Next
DisplaySprite(7,ZielX*64,StartY*64)
DisplaySprite(4,StartX*64,StartY*64)
Delay(100)
ElseIf deltaY < 0 ; Der Startpunkt liegt höhel als der Zielpunkt
deltaY*-1
For deltaY = 1 To (StartY-ZielY)*-1
DisplaySprite(3,ZielX*64,StartY*64+(deltaY*64))
Next
DisplaySprite(6,ZielX*64,StartY*64)
DisplaySprite(5,StartX*64,StartY*64)
Delay(100)
EndIf
EndProcedure
Procedure Wegfindung1() ; Teilschleife von WegFindung() ; tritt ein wenn Start und Zielpunkt auf einer Senkrechten liegen
If deltaY = 0
MessageRequester("Error","Start & Ziel haben selbe Position")
Delay(100)
ElseIf deltaY > 0 ; Der Startpunkt liegt tiefer als der Zielpunkt
For deltaY = 0 To StartY-ZielY
DisplaySprite(3,StartX*64,StartY*64-(deltaY*64))
Next
Delay(100)
ElseIf deltaY < 0 ; Der Startpunkt liegt höhel als der Zielpunkt
deltaY*-1
For deltaY = 0 To (StartY-ZielY)*-1
DisplaySprite(3,StartX*64,StartY*64+(deltaY*64))
Next
Delay(100)
EndIf
EndProcedure
Procedure WegFindung() ; Findet den Direkten Weg von Start zum Ziel
StartDrawing(ScreenOutput())
deltaX = StartX-ZielX
deltaY = StartY-ZielY
If deltaX = 0 ; Start und Zielpunkt liegen auf einer Senkrechten
Wegfindung1()
ElseIf deltaX > 0 ; Der Startpunkt liegt rechts vom Zielpunkt
Wegfindung2()
ElseIf deltaX < 0 ; Der Startpunkt Liegt links vom Zielpunkt
Wegfindung3()
Else
MessageRequester("Error","deltaX hat keinen Wert")
Delay(100)
EndIf
StopDrawing()
FlipBuffers()
EndProcedure
Procedure StartZiel() ; Findet einen Zufälligen Start und Zielpunkt
StartX=Random(15)
If Not StartX=0 Or StartX=15
StartY=Random(1)
If StartY=1
StartY=11
EndIf
Else
StartY=Random(11)
EndIf
Delay(100)
ZielGeneration:
ZielX=Random(15)
If Not StartX=0 Or StartX=15
ZielY=Random(1)
If ZielY=1
ZielY=11
EndIf
Else
StartY=Random(11)
EndIf
If StartX=ZielX And StartY=ZielY
Goto ZielGeneration:
EndIf
Delay(100)
EndProcedure
Procedure Quadrate() ; Definiert die einzelne Quadrate in einem Array
Dim Quadrat(15,11)
For y=0 To 11
For x=1 To 16
Quadrat(x-1,y) = x+(y*16)
Next
Next
Delay(100)
EndProcedure
Procedure Path() ; Darstellen des Start & Zielpunktes
DisplaySprite(8,64*StartX,64*StartY)
DisplaySprite(9,64*ZielX,64*ZielY)
Delay(100)
EndProcedure
Procedure BackGround() ; Schleife zum Zeichnen des Hintergrundes
For x = 0 To 16
For y =0 To 12
DisplaySprite(1,64*x,64*y)
Next
Next
Delay(100)
EndProcedure
Procedure Drawing() ; Zeichnet den Hintergrund & Start & Zielpunkt
StartDrawing(ScreenOutput())
BackGround()
Path()
StopDrawing()
FlipBuffers()
Delay(100)
EndProcedure
Procedure LoadingSprites() ; Lädt die Bilder
LoadSprite(1,"Grass.png")
LoadSprite(2,"Weg_H.png")
LoadSprite(3,"Weg_V.png")
LoadSprite(4,"Weg_Kurve_LD.png")
LoadSprite(5,"Weg_Kurve_LU.png")
LoadSprite(6,"Weg_Kurve_RD.png")
LoadSprite(7,"Weg_Kurve_RU.png")
LoadSprite(8,"Start.png")
LoadSprite(9,"Ziel.png")
Delay(100)
EndProcedure
;************************************************* Hauptschleife ******************************************************
If InitSprite()
If OpenWindow(0,100,100,1024,786,"Tower Defence")
If OpenWindowedScreen(WindowID(0),0,0,1024,768,1,0,0)
UsePNGImageDecoder()
LoadingSprites()
StartZiel()
Drawing()
WegFindung()
Quadrate()
Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
Else
Debug "Can't Open Windowed Screen"
EndIf
Else
Debug "Can't Open Window"
EndIf
Else
Debug "Can't Init Sprite"
EndIf
Das ist der ganze Code, müsst euch einfach eigene Graphicken reinladen
Ich müsst halt gucken das Problem tritt nicht immer auf, weil ja 2 zufällige punkte generiert werden.
Manchmal laufen ja die schleifen garnicht bis zum Kritischen punkt durch.