![]() |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Ok, habs - ersetze die AdVCLComponentWindow.TAdVCLComponentWindow.SetupDi splay durch folgende Prozedur:
Delphi-Quellcode:
Man beachte den letzten Kommentar - ist also ein Bug in der VCL.
procedure TAdVCLComponentWindow.SetupDisplay(AProps: TAdDisplayProperties);
var form: TForm; begin if (FControl is TForm) then form := TForm(FControl) else form := nil; if form <> nil then begin form.Color := 0; form.BorderIcons := [biSystemMenu]; form.Caption := Title; if AProps.Mode = dmWindowed then begin form.BorderStyle := bsSingle; form.ClientWidth := AProps.Width; form.ClientHeight := AProps.Height; form.Top := (Screen.Height - AProps.Height) div 2; form.Left := (Screen.Width - AProps.Width) div 2; end else if (AProps.Mode = dmScreenRes) or (AProps.Mode = dmFullscreen) then begin if AProps.Mode = dmFullScreen then begin ChangeResolution(AProps.Width, AProps.Height, ord(AProps.BitDepth)); end; form.BorderStyle := bsNone; form.Width := Screen.Width; form.Height := Screen.Height; form.Top := 0; form.Left := 0; end; //Actualize handle - it may have changed because of the changes in form.BorderStyle //and form.BorderIcons. //This only applies to Delphi 2005 and earlier FHandle := form.Handle; end; end; |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Danke für den Bugfix.
Hier noch eine Frage: Bei meinem Projekt benötige ich 2 SpriteEngine's. Nun möchte ich einen Pixel-genauen Collisionstest machen. Ist dies möglich? Alternativ wäre eine Funktion wie GetSpriteAt, aber Pixel-genau das was ich suche. Ist dies bzw. wird dies möglich sein? |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Schau dir einfach die "PixelCheck" Demo an. Allerdings benötigt meine aktuelle Methode eine relativ neue, DirectX 9 kompatible Grafikkarte, da die Kollisionen dort berechnet werden.
Alternativ kannst du natürlich eine einfache Kollisionsmap im Speicher halten und damit auf Kollision prüfen. |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Die Demo habe ich mir bereits angeschaut und auch anhand dieser Demo versucht mein Fall-Beispiel zu lösen. Allerdings ohne Erfolg.
Ich versuche mal mein Problem etwas deutlicher, anhand der PixelCheck-Demo, zu beschreiben: Ich habe die PixelCheck-Demo um eine 2te SpriteEngine erweitert. Die 2te SpriteEngine beinhaltet nur den Cursor als Sprite. Ab diesem Zeitpunkt funktioniert der PixelCheck nicht mehr. Hast du eine Idee, wie man dies dann lösen könnte? Zu deinem 2ten Tip mit einer Kollisionsmap im Speicher: Hast du mir hierfür einen Link, der beschreibt, wie man an so etwas ran geht? Gruß Xeres |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Reserviere dir ausreichend Speicher und schreibe dein Bitmap herein:
Delphi-Quellcode:
var
pmem: PByte; pb: PByte; rgba: PRGBA; begin //Reservieren GetMem(pmem, Bitmap.Width * Bitmap.Height); //Daten hereinschreiben pb := PByte; rgba := Bitmap.Scanline; for y := 0 to Bitmap.Width - 1 do begin for x := 0 to Bitmap.Height - 1 do begin if rgba^ = Transparenzfarbe then pb^ := 0 else pb^ := 255; inc(pb); inc(rgba); end; end; //Pixel überprüfen pb := pmem; inc(pb, meineXPos + meineYPos * Bitmap.Height); if pb^ = 255 then Kollision; //Freigeben FreeMem(pmem); end; |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Ich bekomme fehlermeldungen bei D2009.
Zitat:
gruß Ebil |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Ich schätze mal das liegt daran, dass sich in Delphi 2009 was Strings betrifft so einiges geändert hat.
|
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Naja das einzige problem ist imo eigentlich das hier:
Delphi-Quellcode:
Dort erscheint die fehlermeldung
EnumDisplaySettings(nil,i,DeviceMode)
[DCC Fehler] AdVCLComponentWindow.pas(181): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen Keine ahnung was das meint =o |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
ich denke es liegt am TDeviceModeA.
Wie ist der bei dir definiert? Ich vermute, dass mit einführung von Unicode der Typ eventuell neu definiert wurde und damit inkompatibel ist. Probier mal TDeviceMode ohne A oder mit W. Das sind aber reine spekulationen, da ich leider kein Delphi hier habe um zu schauen. |
Re: Andorra 2D [Ver. 0.40, 01.07.08]
Welche Version hast du? Die aktuelle CVS Version? Bei der hatte ich mit Delphi 2009 keine Probleme. Ich kann das jetzt allerdings nicht mehr nachvollziehen, da meine Trial schon seit Monaten abgelaufen ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 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