Geschwindigkeitsproblem
Übersicht

![]() |
rambo256Betreff: Geschwindigkeitsproblem |
![]() Antworten mit Zitat ![]() |
---|---|---|
wie könnte man das optimieren?
Code: [AUSKLAPPEN] For i = 0 To 99
If schuss#(i,0) = 1 Then schuss#(i,1) = schuss#(i,1)+(3*schuss#(i,3)) schuss#(i,2) = schuss#(i,2)+(3*schuss#(i,4)) EndIf If schuss#(i,1) > Graphics_Width Or schuss#(i,1) < 0 Or schuss#(i,2) > Graphics_Height Or schuss#(i,1) < 0 Then schuss#(i,0) = 0 EndIf For x=0 To Max_tiles_X For y=0 To Max_tiles_Y If ImagesCollide(Projektil_bilder(Winkel_Player,auswahl),schuss#(i,1),schuss(i,2),0,Town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y)) = True Then schuss#(i,0) = 0 EndIf If Tile_matrix(2,x,y) > 0 Then Kollision_stellen(x,y) = 1 EndIf If ImagesCollide(Player_gfx_steht,Player_X,Player_y,0,Town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y))=True Then col_winkel = Winkel(Player_X,Player_Y,x*tile_width,y*tile_height) Player_X = Old_player_X Player_Y = Old_Player_Y col_1 = True collide = True EndIf If ImagesCollide(Player_gfx_laeuft_1,Player_X,Player_y,0,Town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y))=True Then col_winkel = Winkel(Player_X,Player_Y,x*tile_width,y*tile_height) Player_X = Old_player_X Player_Y = Old_Player_Y col_2 = True collide = True EndIf If ImagesCollide(Player_gfx_laeuft_2,Player_X,Player_y,0,Town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y))=True Then col_winkel = Winkel(Player_X,Player_Y,x*tile_width,y*tile_height) Player_X = Old_player_X Player_Y = Old_Player_Y col_3 = True collide = True EndIf If ImagesCollide(Player_gfx_laeuft_3,Player_X,Player_y,0,Town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y))=True Then col_winkel = Winkel(Player_X,Player_Y,x*tile_width,y*tile_height) Player_X = Old_player_X Player_Y = Old_Player_Y col_4 = True collide = True EndIf If ImagesCollide(Player_gfx_laeuft_4,Player_X,Player_y,0,Town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y))=True Then col_winkel = Winkel(Player_X,Player_Y,x*tile_width,y*tile_height) Player_X = Old_player_X Player_Y = Old_Player_Y col_5 = True collide = True EndIf If ImagesCollide(Player_gfx_laeuft_5,Player_X,Player_y,0,Town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y))=True Then col_winkel = Winkel(Player_X,Player_Y,x*tile_width,y*tile_height) Player_X = Old_player_X Player_Y = Old_Player_Y col_6 = True collide = True EndIf If ImagesCollide(Player_gfx_laeuft_6,Player_X,Player_y,0,Town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y))=True Then col_winkel = Winkel(Player_X,Player_Y,x*tile_width,y*tile_height) Player_X = Old_player_X Player_Y = Old_Player_Y col_7 = True collide = True EndIf Next Next Next wenn ich das einbaue,dann ruckelt es wie sau,auch wenn ich debug enabled ausgeschaltet hab ![]() |
||
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du hast eine ganze Menge an Multiplikationen drinne, was enorm an
der Geschwindigkeit zieht.Zudem fragst du jede einzelne Animation des Helden ab.Es wäre leichter , wenn du ein einziges Kollisionsbild erzeugst was alle andern Bilder halbwegs abdeckt und somit deren Kollisionsprüfung darstellt.Dann ersparst du dir die vielen Abfragen. Du kannst du Positionen, die berechnet werden auch vorher in ein Dimfeld laden und später auslesen.Es bringt sehr viel Geschwindigkeit. |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich habe es jetzt in mehrere For-SChleifen aufgeteilt,is jetzt auch schon besser,d.h. jetzt hab ich ca. 20 frames/second,aber bekomme ich das auch noch schneller hin? | ||
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Verwende nicht so viele Floatzahlen.Wie ich sehe, hast du für eine
bestimmte Anzahl von etwas diese verwendet.Benutze nur Integer- zahlen bei solchen Unternehmungen.Ansonsten sollte man noch Auflösung und Farbtiefe entschärfen ( sofern du es schon getan hast ). |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich wüsste nochwas...
Sollte ich die Projektile als Plot,rect oder als image zeichnen? Aber dann stellt sich die Frage,wie ich das mit der Kollisionsabfrage mache,wenn ich statt Bilder Plots bzw. rects habe?! |
||
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
image ist schon ok, du machst zu viele kollisionsabfragen... probier mal imagesoverlap statt imagescollide | ||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
das hab ich mir auch schon gedacht,aber dann hab ich folgendes problem:
Da ich 3layer habe und mehrere Tiles in einem Tileset,muss ich dann auch die Frames angeben... ![]() Und das geht ja bei imagesoverlap nicht |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich hab jetzt gemerkt,das es an dieser Abfrage liegt...
wie könnte man das optimiern? Code: [AUSKLAPPEN] For i=0 To 99
For x=0 To Max_Tiles_X For y=0 To Max_Tiles_Y If ImagesCollide(Projektil_bilder(Winkel_Player,auswahl),schuss#(i,1),schuss(i,2),0,Town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y)) = True Then schuss#(i,0) = 0 EndIf Next Next Next |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hmmm,
das ist doch irgendwie klar ! Wenn du 100 mal die x-y-Koordinaten deiner ganzen Map durchrechnen läßt. Berechne einfach die Koordinate deines jeweiligen Schusses auf der Map Dann geht es schneller. Toni |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mhh,irgendwie versteh ich nicht was du damit meinst...
Das mache ich doch eigentlich oder nicht? Vll wäre es ganz nützlich,wenn du mir mal einen Pseudo-Code aufschreibst,das wäre nett!! THX |
||
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du berechnest aber für alle Schüsse im Dimfeld die Variablen.
Ich würde Typen empfehlen und dem entsprechend eine Each-Schleife machen |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du solltest nur Prüfen wenn schuss#(i,0)=1 ist,
ausserdem weisst du doch wo der Schuss ist, da musst du nicht mit allen Tiles vergleichen. ..... code kann ich dir leider keinen geben, mein Blitz startet nicht mehr sobald ich online bin. ![]() |
||
solitaire |
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
einen Pseudo-Code denn? | ||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das allererste "endif" das zu
"If schuss#(i,0) = 1 Then " gehört, erst vor dem letzten "next" schliessen. und diese Schleife For x=0 To Max_tiles_X For y=0 To Max_tiles_Y ..... müsste wohl raus und durch soetwas ersetzen: if positionschuss=positionfeind if positionschuss=positionzielobjekt if positionschuss=positionhinderniss etc aber auf keinen fall alle tiles abfragen |
||
solitaire |
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also,ich denke du meinst das so:
hier zähle ich alle "Kollisionsstellen",aber vor der repeat schleife!!! Code: [AUSKLAPPEN] For x=0 To max_tiles_X For y=0 To Max_tiles_Y If tile_matrix(2,x,y) > 1 Then Kollision_stellen(X,Y) = 1 kollis = kollis+1 EndIf Next Next Hier ist die eigentliche kollisionsabfrage und die Kugelaktualisierung: Code: [AUSKLAPPEN] ;Kugeln Aktualisiern
For i = 0 To 99 If schuss(i,0)=1 Then schuss(i,1) = schuss(i,1)+(3*schuss(i,3)) schuss(i,2) = schuss(i,2)+(3*schuss(i,4)) If schuss(i,1) > Graphics_Width Or schuss(i,1) < 0 Or schuss(i,2) > Graphics_Height Or schuss(i,1) < 0 Then schuss(i,0) = 0 EndIf For x=0 To max_tiles_x For y=0 To max_tiles_y If Kollision_stellen(X,Y) = 1 Then If ImagesCollide(projektil_bilder(Winkel_Player,auswahl),schuss(i,1),schuss(i,2),0,town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y)) Then schuss(i,0) = 0 EndIf EndIf Next Next EndIf Next nur dann kommt in unregelmäßigen abständen beim schießen ein Array index out of bounce... |
||
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
woran liegt das?!
Es klappt jetzt alles,nur dann kommt in unregelmäßigen abständen ein Array-Index out of bounds. Das kam sonst nie!!! Wäre nett wenn ihr mir da auch noch weiterhelfen könntet. THX |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach den Debugger an,
und sag mal in welcher Zeile der Fehler auftritt. |
||
solitaire |
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Diese:
Code: [AUSKLAPPEN] If ImagesCollide(projektil_bilder(Winkel_Player,auswahl),schuss(i,1),schuss(i,2),0,town1_gfx_2,x*Tile_width,y*tile_height,tile_matrix(2,x,y))
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group