AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[DelphiX] Sprites

Ein Thema von 3_of_8 · begonnen am 4. Jul 2006 · letzter Beitrag vom 6. Jul 2006
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 19:41
Hmm...
Er ist halt abhängig von der Position des Spielers, wird also gedreht und ab und zu wird auch ein komplett neuer geladen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#22

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 19:42
Hm, möchtest du gute oder mittelmäßig - schlechte Grafiken einbauen ?
  Mit Zitat antworten Zitat
pacman1986

Registriert seit: 11. Feb 2005
Ort: Kirchhain
498 Beiträge
 
Delphi 2005 Personal
 
#23

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 20:08
backgroundsprite ist wirklich zum empfehlen da laedts du am anfang die komplette spielflaeche in den hintergrund
Christian N.
Designed to make a difference

najjaronline.de
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#24

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 20:09
er will targa benutzen.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#25

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 20:22
Targa ?

Merk dir diesen Satz mal für die Zukunft (wirst du bei DelphiX noch brauchen, wenn es plötzlich ruckelt):
Je besser die Grafiken, desto schlechter DelphiX.

[Deshalb die Frage, wie hoch die Qualität deiner Grafiken sind]
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#26

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 20:27
Targa, genau. Ich habe mehrere Targas in einer Datei, lade sie, dekomprimiere sie und speichere sie als Bitmaps in eine TDXImageList. Und dann?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 20:44
Ich glaube, du musst uns jetzt mal gaaanz genau erklären, was du überhaput machen möchtest.

Wenn ich das richtig verstanden habe, dann möchtest du eine Karte darstellen.

Frage 1: Wie ist dies Karte aufgebaut? Immer wieder abwechselnde Grafiken oder komplett gekachelt mit einer Grafik?

Frage 2: Was wolltest du mit den Sprites genau erreichen?

Wenn du einen komplett, mit einer Grafik, gekachelten Hintergrund hast, dann musst du TBackgroundSprite verwenden.

Wenn du immer abwechselnde Tiles hast, dann leite dir eine Klasse von TImageSprite ab, erstelle so viele Kacheln wie du brauchst um den Bildschirm zu füllen. Ich empfehle dir allerding wärmstens größere Tiles als 30x30 oder 50x50 zu verwenden.

Gehen wir mal von fall 2 aus, dann machst du einfach folgendes:

Delphi-Quellcode:
procedure LoadImagesIntoList;
var i:integer;
begin
  for i := 0 to tgas.count-1 do
  begin
    with TPictureCollectionItem(DXImagelist1.Items.Add) do
    begin
      picture.bitmap.width := tgas[i].width;
      picture.bitmap.height := tgas[i].height;
      picture.bitmap.canvas.draw(0,0,tgas[i]);
      transparent := false;
      restore;
    end;
  end;
end;

procedure CreateTiles; //aufrufen in OnCreate
var ax,ay:integer;
begin
  for ax := 0 to 100 do
    for ay := 0 to 100 do
    begin
      with TImageSprite.Create(DXSpriteEngine1.Engine) do
      begin
        image := DXImageList1.Items[random(DXImagelist1.Count)];
        width := image.width;
        height := image.height
        x := ax*width;
        y := ay*height;
      end;
    end;
end;

procedure DXTimer1Timer(sender:TObject;lagcount:integer);
begin
  DXDraw1.Surface.Fill(0);
  DXSpriteEngine1.Move(1);
  DXSpriteEngine1.Draw;
  DXSpriteEngine1.Dead;
  DXDraw1.Flip;
end;
So, hoffe geholfen zu haben, alle angaben wie immer ohne Gehwär...

igel457
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 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#28

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 20:48
Also: Ich habe einen Hintergrund der aus mehreren verschiedenen Tiles bestehen kann.

Mit Sprites wollte ich gar nichts erreichen - inherited besteht darauf.

Mein Code zum Laden der Sprites sieht so aus:

Delphi-Quellcode:
unit Tiles;

interface

uses SysUtils, Classes, Targa, DXDraws, Graphics, Dialogs;

type
  TTiles=class
  protected
    imglst: TDXImageList;
    FTileWidth, FTileHeight: Cardinal;
    function GetTile(Index: Cardinal): TPictureCollectionItem;
    function GetCount: Integer;
  public
    constructor Create;
    destructor Destroy; override;
    procedure LoadFromFile(FileName: string);
    property TileWidth: Cardinal read FTileWidth;
    property TileHeight: Cardinal read FTileHeight;
    property Tiles[Index: Cardinal]: TPictureCollectionItem
    read GetTile; default;
    property Count: Integer read GetCount;
  end;

implementation

function TTiles.GetTile(Index: Cardinal): TPictureCOllectionItem;
begin
  Result:=imglst.Items.Items[Index];
end;

constructor TTiles.Create;
begin
  inherited Create;
  FTileWidth:=32;
  FTileHeight:=32;
  imglst:=TDXImageList.Create(nil);
end;

destructor TTiles.Destroy;
begin
  imglst.free;
  inherited Destroy;
end;

function TTiles.GetCount: Integer;
begin
  result:=imglst.items.Count;
end;

procedure TTiles.LoadFromFile(FileName: string);
var fs: TFileStream;
  memstr: TMemoryStream;
  size: Cardinal;
  buf: array of Byte;
  tgaimg: TTarga;
begin
  imglst.Items.Clear;
  fs:=TFileStream.Create(FileName, fmOpenRead);
  memstr:=TMemoryStream.Create;
  tgaimg:=TTarga.Create;
  fs.Read(FTileWidth, sizeof(Cardinal));
  fs.Read(FTileHeight, sizeof(Cardinal));
  while true do
  begin
    if fs.Read(size, sizeof(Cardinal))<sizeof(Cardinal) then break;
    setlength(buf, size);
    if Cardinal(fs.Read(buf[0], size))<size then break;
    memstr.Write(buf[0], size);
    memstr.position:=0;
    tgaimg.LoadFromStream(memstr);
    with imglst.Items.Items[imglst.Items.Add.Index] do
    begin
       Picture.Bitmap:=TBitmap.Create;
       Picture.Bitmap.Assign(tgaimg.Bitmap);
      Picture.Bitmap.Canvas.Pen.Style:=psDash; ;
        Picture.Bitmap.Canvas.Pen.Color:=clWhite;
      Picture.Bitmap.Canvas.Brush.Style:=bsClear;
      Picture.Bitmap.Canvas.Rectangle(0, 0, Picture.Bitmap.Width-1,
            Picture.Bitmap.Height-1);
      PatternWidth:=Picture.Bitmap.Width;
      PatternHeight:=Picture.Bitmap.Height;
    end;
    memstr.Clear;
  end;
  setlength(buf, 0);
  fs.free;
  memstr.free;
  tgaimg.free;
end;

end.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 20:56
Du musst die imglist mit dem DXDraw verknüpfen...
(ImgList.DXDraw := ADXDraw)
Außerdem musst du noch "Restore" aufrufen, nachdem du ein Bild in der ImageList verändert hast.
Und mein weg mit dem With ist ein wenig "eleganter".
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 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#30

Re: [DelphiX] Sprites

  Alt 5. Jul 2006, 21:07
Geht trotzdem ned...

Delphi-Quellcode:
unit Tiles;

interface

uses SysUtils, Classes, Targa, DXDraws, Graphics, Dialogs;

type
  TTiles=class
  protected
    imglst: TDXImageList;
    FTileWidth, FTileHeight: Cardinal;
    function GetTile(Index: Cardinal): TPictureCollectionItem;
    function GetCount: Integer;
  public
    constructor Create(DXDraw: TDXDraw);
    destructor Destroy; override;
    procedure LoadFromFile(FileName: string);
    property TileWidth: Cardinal read FTileWidth;
    property TileHeight: Cardinal read FTileHeight;
    property Tiles[Index: Cardinal]: TPictureCollectionItem
          read GetTile; default;
    property Count: Integer read GetCount;
  end;

implementation

function TTiles.GetTile(Index: Cardinal): TPictureCOllectionItem;
begin
  Result:=imglst.Items.Items[Index];
end;

constructor TTiles.Create(DXDraw: TDXDraw);
begin
  inherited Create;
  FTileWidth:=32;
  FTileHeight:=32;
  imglst:=TDXImageList.Create(DXDraw);
end;

destructor TTiles.Destroy;
begin
  imglst.free;
  inherited Destroy;
end;

function TTiles.GetCount: Integer;
begin
  result:=imglst.items.Count;
end;

procedure TTiles.LoadFromFile(FileName: string);
var fs: TFileStream;
  memstr: TMemoryStream;
  size: Cardinal;
  buf: array of Byte;
  tgaimg: TTarga;
begin
  imglst.Items.Clear;
  fs:=TFileStream.Create(FileName, fmOpenRead);
  memstr:=TMemoryStream.Create;
  tgaimg:=TTarga.Create;
  fs.Read(FTileWidth, sizeof(Cardinal));
  fs.Read(FTileHeight, sizeof(Cardinal));
  while true do
  begin
    if fs.Read(size, sizeof(Cardinal))<sizeof(Cardinal) then break;
    setlength(buf, size);
    if Cardinal(fs.Read(buf[0], size))<size then break;
    memstr.Write(buf[0], size);
    memstr.position:=0;
    tgaimg.LoadFromStream(memstr);
    with imglst.Items.Items[imglst.Items.Add.Index] do
    begin
       Picture.Bitmap:=TBitmap.Create;
       Picture.Bitmap.Assign(tgaimg.Bitmap);
      Picture.Bitmap.Canvas.Pen.Style:=psDash; ;
        Picture.Bitmap.Canvas.Pen.Color:=clWhite;
      Picture.Bitmap.Canvas.Brush.Style:=bsClear;
      Picture.Bitmap.Canvas.Rectangle(0, 0, Picture.Bitmap.Width-1,
            Picture.Bitmap.Height-1);
    end;
    memstr.Clear;
  end;
  imglst.Items.Restore;
  setlength(buf, 0);
  fs.free;
  memstr.free;
  tgaimg.free;
end;

end.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 06:48 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