Types, Tiles und Performance
Übersicht

![]() |
NeoxitBetreff: Types, Tiles und Performance |
![]() Antworten mit Zitat ![]() |
---|---|---|
Halli Hallo meine lieben,
wie einige bestimmt schon in meinem Projekt Topic feststellen konnten, gibt es bei vielen Leuten ein tierisches Problem was die Auslastung des Systems angeht (ja ich habe einen Frametimer ![]() https://www.blitzforum.de/foru...hp?t=36205 Ich kann nur absolut nicht sagen, wie ich es noch mehr Performanceentlastender gestalten kann =/ Es geht um Grabber. Ich verwende für Verschiedene Dinge Types, zu beginn nutze ich genau 4 Types (Derzeitig noch): (P.s.: Ja, ich weiß wortschreibungen deutsch /englisch so wie player_x, playerY schreibungen gemischt, sollte nicht sein auf eine festlege^^) Code: [AUSKLAPPEN] Type TLevel Field id,x,y,img,frame,name$,live,passable,mineable,growable,drop,drop_menge,toolaffect,blockreact End Type Type TUmgebung Field id,x,y,img,live,frame End Type Type TBlockdatei Field id,img,frame,name$,live,passable,mineable,growable,drop,drop_menge,toolaffect,blockreact,r,g,b End Type Type TFarbtabelle Field blockid,r,g,b End Type Soweit meine Types. Meine Blockinformationen werden folgendermaßen ausgelesen: Code: [AUSKLAPPEN] blockfile = OpenFile("bin/blocks/blocks.txt") datensaetze = ReadLine(blockfile) ReadLine(blockfile) For i = 1 To datensaetze dat_block.TBlockdatei = New TBlockdatei dat_block\id = ReadLine(blockfile) img_path$ = ReadLine$(blockfile) dat_block\frame = ReadLine(blockfile) dat_block\img = LoadAnimImage(img_path$,32,32,0,dat_block\frame) dat_block\name$ = ReadLine(blockfile) dat_block\live = ReadLine(blockfile) dat_block\passable = ReadLine(blockfile) dat_block\mineable = ReadLine(blockfile) dat_block\growable = ReadLine(blockfile) dat_block\drop = ReadLine(blockfile) dat_block\drop_menge = ReadLine(blockfile) dat_block\toolaffect = ReadLine(blockfile) dat_block\blockreact = ReadLine(blockfile) dat_block\r = ReadLine(blockfile) dat_block\g = ReadLine(blockfile) dat_block\b = ReadLine(blockfile) ReadLine(blockfile) Next CloseFile(blockfile) Und mein Level wird folgendermaßen Generiert: Code: [AUSKLAPPEN] ;//////////////////////////////////// ;Levelbitmap einlesen und erstellen ;Image zum auslesen zeichnen mapoverlay = LoadImage("bin/level/level2.bmp") mapoverlay_hoehe = ImageHeight(mapoverlay) mapoverlay_breite = ImageWidth(mapoverlay) DrawImage mapoverlay,0,0 pixelreader_x = 0 pixelreader_y = 0 For j = 1 To mapoverlay_hoehe For i = 1 To mapoverlay_breite integer_rgb = ReadPixel(pixelreader_x,pixelreader_y,BackBuffer()) col_r = RWertLesen(integer_rgb) col_g = GWertLesen(integer_rgb) col_b = BWertLesen(integer_rgb) For dat_block.TBlockdatei = Each TBlockdatei If dat_block\r = col_r And dat_block\g = col_g And dat_block\b = col_b Then block.Tlevel = New Tlevel block\id = dat_block\id block\x = blockplacer_x block\y = blockplacer_y block\img = dat_block\img block\frame = 0 block\name$ = dat_block\name$ block\live = dat_block\live block\passable = dat_block\passable block\mineable = dat_block\mineable block\growable = dat_block\growable block\drop = dat_block\drop block\drop_menge = dat_block\drop_menge block\toolaffect = dat_block\toolaffect block\blockreact = dat_block\blockreact EndIf Next pixelreader_x = pixelreader_x + 1 blockplacer_x = blockplacer_x + 32 ;Koordinaten für den nächsten Block in der weite vorbereiten Next pixelreader_x = 0 pixelreader_y = pixelreader_y + 1 blockplacer_x = 0 blockplacer_y = blockplacer_y + 32 ; Koordinaten für den nächsten Block in der Höhe vorbereiten Next ;////////////////////////////////// Liest er auch Korrekt ein, läuft also alles soweit, nun aber natürlich die beiden Abfragen die in meinen Augen Höchstwahrscheinlich der "Performanceknubbl" ist: Code: [AUSKLAPPEN] For block.Tlevel = Each Tlevel ;Level / Blöcke Zeichnen If block\x >= 0 And block\y >= 0 And block\x <= 1024 And block\y <= 768 DrawImage block\img,block\x,block\y,Block\frame EndIf ;Untere Kollision If ImagesCollide(col_dummy_unten,col_dummy_unten_x,col_dummy_unten_y,0,block\img,block\x,block\y,0) And block\passable = False Then player_y = player_y_old EndIf ;Linke Kollision If ImagesCollide(col_dummy_links,col_dummy_links_x,col_dummy_links_y,0,block\img,block\x,block\y,0) And block\passable = False Then player_x = player_x_old EndIf ;Rechte Kollision If ImagesCollide(col_dummy_rechts,col_dummy_rechts_x,col_dummy_rechts_y,0,block\img,block\x,block\y,0) And block\passable = False Then player_x = player_x_old EndIf ;Obere Kollision If ImagesCollide(col_dummy_oben,col_dummy_oben_x,col_dummy_oben_y,0,block\img,block\x,block\y,0) And block\passable = False Then player_y = player_y_old ;Spieler kollidiert mit oberen = Jumpflag ausmachen flag_springen = False flag_fallen = True jumptimer = 0 EndIf Next Und ja, diese abfrage wird in JEDEM schleifendurchgang gemacht. Für jeden Blocktype der vorhanden ist. Sollte das auch in euren Punkten der extremlastige Punkt sein... sagt mir wie ich es besser machen kann geschweige denn noch anders ansprechen kann.. =/ Ich habe nun schon die meisten Punkte wo pro schleifendurchlauf häufiger der gesamte Type angesprochen wurde entfernt und verallgemeinert. Allerdings kann das langsam nich mehr sein.. selbst wenn ich ein Level mit nur 10x10 Tiles baue geht bei mir die Prozessorleistung windowed auf um die 46 % Prozessorausleistung (Dualcore also quasi 92 % auf 1 Kern) warum? Ich bin Ratlos. Mir ist bewusst, das ich keine Ganzen Codeteile posten soll, sondern nur fetzen, die ersten 2 - 3 sind allerdings nur dafür da, damit ihr nachvollziehen könnt für was der entsprechende Type etc. ist und was er macht. Gruß Neoxit |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da du nur 5% Auslastung im Fullscreen hast, denke ich, dass du Flip![]() ![]() mfG mpmxyz Edit: Vermute nicht, miss! Die gebrauchte Zeit von mehreren Code-Abschnitten lässt sich einfach mit Millisecs ![]() |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Neoxit |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Halli Hallo meine lieben,
wie einige bestimmt schon in meinem Projekt Topic feststellen konnten, gibt es bei vielen Leuten ein tierisches Problem was die Auslastung des Systems angeht (ja ich habe einen Frametimer Wink ). Frametimer ist also drinne und Flip habe ich auch mit VSync mal ausprobiert, die selbe auslastung. Auch laut Hubsi im anderen Topic besitzt er bei Fullscreen 100% auslastung. |
||
![]() |
Neoxit |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahh ich hab dich missverstanden!
Riesen Dickes Dankeschön ich dacht ich werd bekloppt! Flip 0 <> Flip 1 / Flip... mein gott Flipp 0 hat mich gerettet. So ein Simpler fehler und ich Stell den Code 100 x um... 0-1 % sinds nun.... DANKE! xD |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte beachte auch noch:
![]() ![]() ![]() ![]() Code: [AUSKLAPPEN] Type TLevel
Field id, x, y Field img, frame Field name$, live Field passable, mineable, growable Field drop, drop_menge Field toolaffect, blockreact End Type |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Neoxit |
![]() Antworten mit Zitat ![]() |
---|---|---|
Arrow FAQ: ImagesCollide & Memory Access Violation ?! - Ist mir bereits bekannt, werde ich aber wohl erst dann umsetzen wenn die grundprobleme mit der Performance beseitigt sind.
Arrow Ich würde immer raten - auch wenn BB das für Anfänger nicht erzwingt - alle Variablen zu deklarieren. - Speicherschonender? Arrow Genauso sei dir IDEal angeraten, wenn du noch die Blitz Standard-IDE verwendest. - Ja nutze Standart, werde sie mir mal anschauen Arrow Wenn du deine Types etwas auseinander ziehst, ist der Code viel lesbarer... - Bis ich mir eine neue "Schreibweise" angewöhnt habe könnte das ein wenig dauern aber ich werds versuchen zu beherzigen ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hat nichts mit dem Speicher zu tun, aber damit, wie oft man sich vertippt und damit seltsame Bugs kreiert. IDEal kann dir was falsch geschriebenes dann in leuchtend rot anzeigen - und Autokomplettieren. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Neoxit |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok danke nochmal Xeres, werde es mir direkt mal anschauen.
Grabber 0.00.9_2a http://rapidshare.com/files/43...0.9_2a.rar Das kleine Update was die Performance steigern sollte. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group