![]() |
Re: Kollision zwischen 2 Bildern in DelphiX
Liste der Anhänge anzeigen (Anzahl: 1)
Danke mal für deine Antwort, aber leider muss ich dich entäuschen.
Das was du mir programmiert hast, habe ich auch schon selber mal programmiert. Es handelt sich um das Bewegen. Es soll sich nicht der Spieler bewegen, sondern die Umgebung. Der Spieler soll im Mittelpunkt befestigt sein und sich nicht vom Platz bewegen. Ich hab schon vieles probiert, komme aber nicht auf die Lösung. Habe hier ein Bild, wie ich das meine. (Bei meinem Spiel, was ich da oben mitgeschickt habe, ist es auch so) |
Re: Kollision zwischen 2 Bildern in DelphiX
Zitat:
|
Re: Kollision zwischen 2 Bildern in DelphiX
Liste der Anhänge anzeigen (Anzahl: 1)
So , ich hoffe das dir dieses Beispiel weiter hilft!
Ich hatte noch keine Zeit für deine (Ich geh um die Büsche Kollision)! Aber sonst funkst alles ruckelfrei! Eins noch, da die Büsche jetzt keine VAriablen sind, kannst du sie nur mit Itemindex von der Spriteengine oder per finspriteat(x,y) anwählen! Wenn es immernoch nicht das ist was du suchst , habe ich wohl grundlegend was falsch verstanden! ATwardz! |
Re: Kollision zwischen 2 Bildern in DelphiX
Danke, das hat mir gefehlt. Mille grazie!!!
Hab das Tgegenstand.create immer anders gemacht :stupid: . Das wird der Grund gewesen sein, wieso ich nur 1 Bild für Tgegenstand deklarieren konnte :idea: . Habe gerade deinen Quellcode Delphi4 tauglich gemacht :corky: (Hab nur Delphi4 und deswegen kann ich die neueren Versionen nicht öffnen, weil da immer ein Error kommt. Ich kann halt nur den Quellcode lesen, das Fenster, wo Labels, Buttons etc reinkommen, dass ladet der nicht.) :| Bin im Moment gerade dabei, das Laden einzufügen, was ich aber sicher gleich haben werde. :-D |
Re: Kollision zwischen 2 Bildern in DelphiX
Freud mich das ich helfen konnte!
Viel Erfolg noch! ATwardz |
Re: Kollision zwischen 2 Bildern in DelphiX
So, bin erst jetzt zum Erläutern meines Problems gekommen. :?:
Ich öffne das Projekt. Das Öffnen-Fenster von Windows öffnet sich auch. Ich such die Textdatei, welche den Code für das Level enthält heraus und öffne sie. Es funktoniert alles perfekt, ausser eines. :x Die Version, die ich von ATwardz erhalten habe, funktioniert ruckelfrei. Mein Level aber nicht. Es ist auch nicht grösser oder enthält mehr Sachen. 10 Büsche, 1 Player und der Rest ist Gras. Also kann es nur am Laden liegen. Ich lade die Textdatei nämlich so:
Delphi-Quellcode:
Und die Textdatei schaut so aus:
if opendialog1.execute then
Data:=TIniFile.Create(opendialog1.Filename); for i:=0 to Maxx do begin for j:=0 to Maxy do begin steine[i,j].visible := Data.readBool(IntToStr(i)+'_'+IntToStr(j),'visible',True); steine[i,j].typ := Data.readInteger(IntToStr(i)+'_'+IntToStr(j),'typ',0); end; end; data.free; muster:=Timage.create(self); for i:=0 to Maxx do begin for j:=0 to Maxy do begin With TGegenstand.Create(DXSpriteEngine1.Engine) do Begin if steine[i,j].typ=2 then begin {Image:=form1.DXImageList1.Items[0];} X:=j*32; Y:=i*32; end; end; end; end; muster.free; end; [1_1] visible=1 typ=2 [3_5] visible=1 typ=3 [4_8] visible=1 typ=2 ... Und dann wird das nie wieder verwendet. :gruebel: |
zu viele Bilder eingeladen!
Hi,
ich bin es wieder! Welche Werte werden MaxX und Maxy zugeweiden? Ich rate dir hiermit immernoch das du mit Sprites arbeites, da diese wesntlich effektiver sind. Dein Problkem ist glaube ich, das du alle Bitmaps lädst und anzeigst(Ach diese, die nicht im Surface deines Fensters angeziegt werden! So muss der Rechner überflüßiges berechnen! Vorteile von Sprites sind, dass nur immer diese berechnet werden die angezeigt man sehen kann, jeder sprite greift auf deine Imagelist zu und nimmt das bild bei jeder berechnung neu aus der Liste!So ist deine Version viel Speicherfressender,da zu bei 100 Büschen 100 mal die Bitmap/JPG einliesst!(Schau dir mal im Taskmanager den verwendeten Speicher an, ich glaube der wird enorm sein! An deiner Stelle würde ich echt auf Sprites umsteigen! So muss du es folgendermassen anstellen! - Images erstellen wenn sie ins Bild rücken! - Images freigeben wenn sie aus dem Bild rücken! - Die SaveTXT muss desswegen noch Koordinaten erhalten! So ich denke einer von beiden wegen, wobei die Spritesvariante echt die entschieden bessere ist :zwinker: , müsste hinhauen! |
Re: Kollision zwischen 2 Bildern in DelphiX
Es sind Sprites, die ich für die Büsche verwende.
Es besteht alles aus Sprites, seitdem du mir das Projekt geschickt hast. :wink: Habe gerade MaxX und MaxY nachgeschaut. 30 war bei beiden eingestellt, aber jetzt hab ich 16/14 eingetippt und jetzt bewegt sich der Spieler (genauer gesagt die Büsche) nicht mehr. Irgendwie komisch. Dann hab ich es wieder auf 30 umgestellt, aber das hat auch nicht funktioniert. :gruebel: Dann hab ich nachgeschaut, wo sich das DoMove befindet und hab gsehn, dass da gar nichts drin steht. :idea: Hab dann was reingschriem und nun funkts flüssig. Aber jetzt hab ich ein Problem, weil du gefragt hast, wieviel ich bei MaxX und MaxY eingegeben habe. wenn ich 100 nimm, dann ruckelts. Es kommt dann ja auf die Grösse des Levels an, welches MaxX und MaxY ich verwende, oder?? Aja, die TXT-Datei enthält ja die Koordinaten zB. [1_1] oder [4_8]. - Images erstellen wenn sie ins Bild rücken! - Images freigeben wenn sie aus dem Bild rücken! Wie ich das machen kann, weiss ich nicht. |
Re: Kollision zwischen 2 Bildern in DelphiX
Ja, dann ist ja eigentlich alles klar, hatte mich dann verlesen im Bezug auf die Koordinaten und so!
Nja das mit dem erstellen und wieder freigeben ist recht simpel! Du bekommst ja im DXdraw immer einem bestimmten Teil deines Levels angezeigt! Nun schreibts du einfach deine Leveleinlesemethode in die OnMove Methode! Nun überprüfst du immer ob einer deiner Büsche eingelsen werden muss wenn du deine Person bewegst!(Dazu musst du aufgrund der Performance dein Level vorher in eine Liste schreiben die du erstellst, sonst muss der rechner ja jedesmal auf die Datei zugreifen,das verlangsam das ganze!) :lol: Nun musst Du nur noch in deine OnMove Procedure schreiben, ungefähr so! IF bewegung = Rechts Then Begin For i:=0 to Büschanzahl If BuschRandkoordinaten = FormRandkoordinaten then Sprite.create; If Sprite.x=Form1.width+Sprite.width then Sprite.dead; end; Hoffe du verstehst was ich meine sonst frag einfach! @wardz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz