AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [DelphiX] Phantom Sprite
Thema durchsuchen
Ansicht
Themen-Optionen

[DelphiX] Phantom Sprite

Ein Thema von Neutral General · begonnen am 22. Aug 2006 · letzter Beitrag vom 25. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

[DelphiX] Phantom Sprite

  Alt 22. Aug 2006, 16:53
Hi,

Also mir ist grad was seltsames passiert.
Ich wollte mir eine DXButton Klasse machen.

Hier ist sie:

Delphi-Quellcode:
  TSpriteButton = class
   private
    FSprite: TImageSprite;
    FTop: Single;
    FLeft: Single;
    FCaption: String;
    FFont: TFont;
    FPicture: TPictureCollectionItem;
    FHeight: Word;
    FWidth: Word;
    procedure SetCaption(const Value: String);
    procedure SetFont(const Value: TFont);
    procedure SetHeight(const Value: Word);
    procedure SetLeft(const Value: Single);
    procedure SetPicture(const Value: TPictureCollectionItem);
    procedure SetTop(const Value: Single);
    procedure SetWidth(const Value: Word);
   public
    constructor Create(Engine: TSprite; APicture: TPictureCollectionItem);
    property Left: Single read FLeft write SetLeft;
    property Top: Single read FTop write SetTop;
    property Width: Word read FWidth write SetWidth;
    property Height: Word read FHeight write SetHeight;
    property Image: TPictureCollectionItem read FPicture write SetPicture;
    property Font: TFont read FFont write SetFont;
    property Caption: String read FCaption write SetCaption;
  end;
So.. Das eine Problem ist halt das ich in SetCaption die Caption auf das Bild des Sprites malen will. Aber nicht nur das das nicht funktioniert, das Sprite bewegt sich auch noch o.O
Aber das ist nicht alles. Die Koordinaten des Sprites bleiben unverändert
Wie kann das sein? Das Sprite malt nicht sondern verschiebt sich wobei nichtmal die Koordinaten geändert werden o.Ô.

Hier mal die SetCaption Procedure:

Delphi-Quellcode:
procedure TSpriteButton.SetCaption(const Value: String);
begin
  FCaption := Value;
  with FSprite.Image.Picture.Bitmap.Canvas do
  begin
   TextOut((Width div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextWidth(Value) div 2),
           (Height div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextHeight(Value) div 2),
            Value);
  end;
end;
Aufruf:
Delphi-Quellcode:
procedure TfrmMain.DXDraw1Click(Sender: TObject);
begin
  B.Caption := 'HALLO';
end;
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: [DelphiX] Phantom Sprite

  Alt 22. Aug 2006, 17:04
Hallo!

Es fehlt folgendes, ich weiß aber nicht, ob dies deinen Fehler behebt.

Delphi-Quellcode:
procedure TSpriteButton.SetCaption(const Value: String);
begin
  FCaption := Value;
  with FSprite.Image.Picture.Bitmap.Canvas do
  begin
   TextOut((Width div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextWidth(Value) div 2),
           (Height div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextHeight(Value) div 2),
            Value);
  end;
  FSprite.Image.Restore //<-- Die Grafik muss neu in den Grafikspeicher geladen werden
end;
Für mein Spiel habe ich eine GUI Komponenten Sammlung geschrieben. Vielleicht hilft dir ja diese weiter. Zum Compilieren benötigst du die JVCL.
Angehängte Dateien
Dateityp: rar gui_152.rar (380,0 KB, 15x aufgerufen)
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: [DelphiX] Phantom Sprite

  Alt 22. Aug 2006, 17:06
Wenn ich Restore benutze ist danach das ganze Bild weg
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: [DelphiX] Phantom Sprite

  Alt 23. Aug 2006, 11:50
Kann ich vielleicht jetzt schonmal pushen ?
weil um 18:00 ist schon wieder der halbe Tag rum
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#5

Re: [DelphiX] Phantom Sprite

  Alt 23. Aug 2006, 21:35
ich hätte da eine kleine vermutung warum sich das sprit bewegt :
ich weiß jetzt zwar nicht genau ab sich das sprit ständig bewegt oder nur einmal... ich tippe darauf das es sich nur einmal bewegt und zwar:
TextOut((Width div 2) + (FSprite.Image.Picture.Bitmap.Canvas.TextWidth(Value) div 2), ich weiß zwar nicht genau was da ausgerechnet wird(ich vermute du willst den button in der mitte aussrichten)
aber da ist der fehler... schreibe mal an der stelle direkte position angeben.... dan müste das funktionieren bzw. dann dürfte sich das bild nicht mehr bewegen...

und warum du nichts siehst hängt auch damit zu sammen warscheinlich schreibst du den text an einer stelle die auserhalb des angeben canvas liegt, weißt du wie ich es meine ?
z.b.
du hast ein bild:
60X60 Pixel

und jetzt schreibst du an 70,10 das ergbnis würdes du nicht sehen....
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: [DelphiX] Phantom Sprite

  Alt 24. Aug 2006, 11:39
1. Ich habe gemerkt das sich das Sprite sogar bewegt wenn man IRGENDWAS mit IRGENDEINEM Canvas oder nem Picture macht:

Delphi-Quellcode:
procedure SetCaption(const Value: String);
var APic: TPicture;
begin
  FCaption := Value;
  APic := TPicture.Create;
  APic.Bitmap.Canvas.Rectangle(0,0,1,1); // Sprite bewegt sich o.O
end;
Außerdem habe ich es schon mit Textout(0,0,Value) probiert aber man sieht nix

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#7

Re: [DelphiX] Phantom Sprite

  Alt 24. Aug 2006, 16:05
hast du eigentlich die größen festgelegt ?
könntes du mir mal die exe datei senden ?
evlt. installeire ich auch noch mal delphiX....
(ich finde solche sachen immer spanned)
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: [DelphiX] Phantom Sprite

  Alt 25. Aug 2006, 15:35
Dank mimi bekomme ich jetzt Schrift zu sehen und es bewegt sich nichts mehr
Thx nochmal

Also das ganze sieht jetzt vorerst mal so aus (bis alles klappt):

Delphi-Quellcode:
procedure TSpriteButton.SetCaption(const Value: String);
begin
  FCaption := Value;
 
  FSprite.Image.Picture.Bitmap.Canvas.Brush.Style := bsClear;
  FSprite.Image.Picture.Bitmap.Canvas.Font.Color := clred;
  FSprite.Image.Picture.Bitmap.Canvas.TextOut(0,0,Value);
  FSprite.Image.Restore;
end;
Das Problem ist das das zweite mal die erste Schrift nicht überschrieben wird.. Naja hab ich gedacht dann speicher ich den Index des Sprite-Bildes auch ab und mache es so:

Delphi-Quellcode:
procedure TSpriteButton.SetCaption(const Value: String);
begin
  FCaption := Value;
  
  FSprite.Image := FSprite.Image.PictureCollection.Items[PicIndex];
  FSprite.Image.Picture.Bitmap.Canvas.Brush.Style := bsClear;
  FSprite.Image.Picture.Bitmap.Canvas.Font.Color := clred;
  FSprite.Image.Picture.Bitmap.Canvas.TextOut(0,0,Value);
  FSprite.Image.Restore;
end;
Lade mir immer ein frisches Bild aus der Liste und male dadrauf.
Aber nix da o.O Wenn ich mit FSprite.Image...Canvas auf das Bild male wird das Bild der Imagelist auch verändert o.O
Was mach ich denn da am besten?

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#9

Re: [DelphiX] Phantom Sprite

  Alt 25. Aug 2006, 15:52
Zitat von Neutral General:
Lade mir immer ein frisches Bild aus der Liste und male dadrauf.
Aber nix da o.O Wenn ich mit FSprite.Image...Canvas auf das Bild male wird das Bild der Imagelist auch verändert o.O
Was mach ich denn da am besten?
Äh... Ich verstehe dich nicht ganz. Es ist doch logisch, dass wenn du auf das Bild in der Imagelist Zeichnest dieses auch verändet wird.

Wenn du einfach nur wie in der GDI auf ein Canvas Zeichnen möchtest dann mache einfach folgendes:

Delphi-Quellcode:
with DXDraw.Surface.Canvas do
begin
  Font.Color := clWhite;
  Brush.Style := bsClear;
  TextOut(0,0,'Ich bin ein kleiner Text');
  Release; {Unweglassbar}
end;
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: [DelphiX] Phantom Sprite

  Alt 25. Aug 2006, 15:54
Ich mal es ja auch nicht auf das Bild der Imagelist sondern auf das Bild des Sprites
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz