Was macht das so langsam (Alternativen?)
Übersicht

![]() |
The YetiBetreff: Was macht das so langsam (Alternativen?) |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
was sehe ich da:
![]() ![]() nimm doch Text ![]() und ich würde es im vollbildmodus starten. |
||
Reblonce (Jump + Run + Shoot - Game; 20 Levels): Download |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Versuchs mal mit dieser Linienfunktion
http://www.blitzbase.de/quellcode/bresenham.bb |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und mal Funktionen machen statt 10x das gleiche zu schreiben,
dann verlierste auch nicht den Überblick ![]() |
||
![]() |
The Yeti |
![]() Antworten mit Zitat ![]() |
---|---|---|
sbrog hat Folgendes geschrieben:
Okay, das hat geholfen! Vielen Dank nochmal, und nicht mehr hier antworten (hab einfach in die Funktion noch ein kleines ReadPixel eingebaut ![]() Ihr müsst also nicht mehr antworten. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group