Was macht das so langsam (Alternativen?)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

The Yeti

Betreff: Was macht das so langsam (Alternativen?)

BeitragSa, Sep 11, 2004 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hier soll mal zu der Einheiten-Steuerung für ein rundenbasierendes Strategiespiel werden:

Code: [AUSKLAPPEN]
Graphics 1024,768,16,2
basebild=LoadImage("Graphics/Base.PNG")
kollision=CreateImage(1024,768)
SetBuffer BackBuffer()

;----------Funktionen-----------;
Function draw(bild$,bx,by,anim=0)
If ImageRectOverlap(bild$,bx+sichtx,by+sichty,0,0,1024,768) Then DrawImage bild$,bx,by,anim
End Function

Function scrolling()
If KeyDown(200)
If KeyDown(42) Or KeyDown(54)
For einheitz=Each modelle
einheitz\y=einheitz\y+5
Next
Else
For einheitz=Each modelle
einheitz\y=einheitz\y+2
Next
EndIf
EndIf
If KeyDown(208)
If KeyDown(42) Or KeyDown(54)
For einheitz=Each modelle
einheitz\y=einheitz\y-5
Next
Else
For einheitz=Each modelle
einheitz\y=einheitz\y-2
Next
EndIf
EndIf
If KeyDown(203)
If KeyDown(42) Or KeyDown(54)
For einheitz=Each modelle
einheitz\x=einheitz\x+5
Next
Else
For einheitz=Each modelle
einheitz\x=einheitz\x+2
Next
EndIf
EndIf
If KeyDown(205)
If KeyDown(42) Or KeyDown(54)
For einheitz=Each modelle
einheitz\x=einheitz\x-5
Next
Else
For einheitz=Each modelle
einheitz\x=einheitz\x-2
Next
EndIf
EndIf
End Function

;---------Types---------;
Type modelle
Field x
Field y
End Type

;-------Variablen-------.
Global einheitz.modelle
Global einheit.modelle
Global sichtx=0
Global sichty=0

For i=1 To 3
einheit=New modelle
einheit\x=Rand(0,1024)
einheit\y=Rand(0,768)
Next

;-------Hauptschleife---------;

Repeat
Cls
For einheitz=Each modelle
draw(basebild,einheitz\x,einheitz\y)
Next
Locate 0,0
Color 255,255,255
Print "Linksklick: Auswahl, Bestätigen"
Print "Rechtsklick: Auswahl aufheben"
Print "Pfeiltasten: Scrollen"
Print "Shift: Schnelleres Scrollen"
Print "Esc: Abbrechen"
klick=MouseHit(1)
For einheit=Each modelle
If klick=1 And RectsOverlap(MouseX(),MouseY(),1,1,einheit\x,einheit\y,40,40)
einheitz=einheit
Repeat
Cls

For einheitz=Each modelle
draw basebild,einheitz\x,einheitz\y
Next
Color 255,255,255
Oval einheit\x-180,einheit\y-180,400,400,0
 If Sqr((MouseX()-einheit\x-20)^2+(MouseY()-einheit\y-20)^2)>200
 Color 200,0,0
 Line MouseX(),MouseY(),einheit\x+20,einheit\y+20
 Else

linienkolli=0                            ;--- Hier beginnt der krit. Abschnitt!!!! -----
SetBuffer ImageBuffer(kollision)
Cls
Color 0,200,0
Line MouseX(),MouseY(),einheit\x+20,einheit\y+20
SetBuffer BackBuffer()
For einheitz=Each modelle
draw basebild,einheitz\x,einheitz\y
 If Sqr#((einheitz\x-einheit\x)^2)<201 And Sqr#((einheitz\y-einheit\y)^2)<201
 If ImagesCollide(kollision,0,0,0,basebild,einheitz\x,einheitz\y,0) Then linienkolli=linienkolli+1
 EndIf
Next                                                   ;---Hier endet er!!!!!
 If linienkolli<2                        ;<--- Dafür braucht man ihn!
  draw(kollision,0,0)
   If MouseHit(1)
   einheit\x=MouseX()-20
   einheit\y=MouseY()-20
   Exit
   EndIf
 Else
 Color 200,0,0
 Line MouseX(),MouseY(),einheit\x+20,einheit\y+20
 EndIf
 EndIf
If MouseHit(2) Then Exit
If KeyHit(1) Then End
FlushMouse
Locate 0,0
Color 255,255,255
Print "Linksklick: Auswahl, Bestätigen"
Print "Rechtsklick: Auswahl aufheben"
Print "Pfeiltasten: Scrollen"
Print "Shift: Schnelleres Scrollen"
Print "Esc: Abbrechen"
GetColor einheit\x+20,einheit\y+20
scrolling()
Flip
Forever
EndIf
Next
scrolling()
Flip
Until KeyHit(1)
End



Von der Einheit zur Maus wird eine Linie gezeichnet. nun muss ich aber überprüfen, ob diese Linie mit einer anderen Einheit kollidiert (dann soll man nicht bewegen dürfen). Dazu zeichne ich die Linie in den Imagebuffer um dann die Kollison abzufragen. Leider wird das Programm dadurch VERDAMMT langsam (unspielbar). Ich glaube, dass liegt am Befehl "SetBuffer ImageBuffer(kollision)". Aber ich weiß nicht, wie ich die Kollision ohne den imagebuffer testen soll...

Danke im Vorraus, mfg The Yeti

Bms

BeitragSa, Sep 11, 2004 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
was sehe ich da:
Shocked Print ??? Shocked

nimm doch Text Exclamation

und ich würde es im vollbildmodus starten.
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download

BladeRunner

Moderator

BeitragSa, Sep 11, 2004 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum zeichnest du die Linie ein? Ob was im Weg liegt kannst du auch ohne Zeichnerei prüfen... (und auch ohne Imagescollide- schreib dir ne eigene Colli-Func)
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

dominik

BeitragSa, Sep 11, 2004 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/viewtopic.php?t=5729

@BMS: warum schreibst den link nich selber, is doch genaus des was er sucht.
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.

The Yeti

BeitragSa, Sep 11, 2004 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@bms 1) Der Text kommt ja eh am Ende raus...
2) Weil ich noch keinen Mauszeiger gezeichnet habe.


@Bladerunner 1) Weil man sie sehen soll (Das sieht styl0r aus Laughing ).
2) Ich hab keine Ahnung, wie man sowas bei einer Linie machen soll.

@dominik: Hab dort leider einen Fehler gefunden (kann ich also dementspr. nicht benutzen -.-)

sbrog

BeitragSa, Sep 11, 2004 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuchs mal mit dieser Linienfunktion

http://www.blitzbase.de/quellcode/bresenham.bb

Markus2

BeitragDi, Sep 14, 2004 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Und mal Funktionen machen statt 10x das gleiche zu schreiben,
dann verlierste auch nicht den Überblick Wink

The Yeti

BeitragMi, Sep 15, 2004 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
sbrog hat Folgendes geschrieben:
Versuchs mal mit dieser Linienfunktion

http://www.blitzbase.de/quellcode/bresenham.bb


Okay, das hat geholfen! Vielen Dank nochmal, und nicht mehr hier antworten (hab einfach in die Funktion noch ein kleines ReadPixel eingebaut Wink )
Ihr müsst also nicht mehr antworten.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group