Autor Beitrag
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Fr 13.06.03 16:31 
Bestimmt,

habe aber noch nie mit Sprites gearbeitet. Das musst du mal jmd. anderen Fragen. Sorry :oops:

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
breakdancer1111 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 148

Windows 7 Home Premium 64Bit
Delphi XE2 Starter
BeitragVerfasst: Fr 13.06.03 17:45 
Aso, naja ist ja auch nicht so schlimm.
Ist den jemand hier der mit Sprites arbeitet?
:oops:
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: Sa 14.06.03 09:26 
Ich arbeite zur Zeit ziemlich viel mit 2D-Sprites, wie kann ich helfen?
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Sa 14.06.03 11:12 
breakdancer1111 hatte das Problem, eine Figur realistisch springen zu lassen.
Ich habe ihm darum ein kleines, unoptimiertes Programm geschrieben, in dem man eine Figur rechts und links laufen und dazu auch noch springen lassen kann.

Zu breakdanver1111s Bedauern habe ich jedoch keine Sprites bzw. die Animationsengine/TDXSprites benutzt, sondern eine eigene Animation mittels DXImagelist / Patterns aufgebaut (haltge ich persönlich auch für flexibler als die DXSprites).

Nun will breakdancer dieses Programm ([url]www.cbs-shop.de/webser/mario.zip [/url]) mit einer Sprite-engine haben.

Nocht verwundert sein. Ich habe das Programm wirklich nicht optimiert.

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: Sa 14.06.03 12:33 
Also einfach das ganze Gedöns nur mit Sprites, richtig ja?

...

Dein Beispiel ist doch schon ein guter Anfang dafür :shock:
Jetzt ersetzt du den simplen Timer einfach durch den DXTimer, setz das Intervall auf 20, dann trägst du eine Spriteklasse ein (was du mit deinem PlayerSprite wahrscheinlich eh schon hast @breakdancer).
Ich nehme jetzt auch mal an das du die SpriteEngine von DelphiX verwendest. Wenn dem so sein sollte, dann ist es recht simpel:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
{$R *.DFM}

type
  TSpielerSprite = class(TImageSprite)
  protected
    procedure DoMove(MoveCount: Integer); override;
  public
    constructor Create(AParent: TSprite); override;
  end;



constructor TPlayerSprite.Create(AParent: TSprite);
begin
  inherited Create(AParent);
  Image := MainForm.ImageList.Items.Find('Player1.bmp');
  Width := Image.Width;
  Height := Image.Height;

  X := MapSize;
  Y := MapSize;
  Z := 2// schlicht die Z-Koordinate, bei mehreren Sprites nützlich
end;


procedure TPlayerSprite.DoMove(MoveCount: Integer);
begin
  inherited DoMove(MoveCount);

      if isUp in Form1.DXInput.States then Y := Y - (250/1000)*MoveCount;
      if isLeft in Form1.DXInput.States then X := X - (250/1000)*MoveCount;
      if isRight in Form1.DXInput.States then X := X + (250/1000)*MoveCount;
end;


Und anstelle von dem angegebenen isUp verwendest du jetzt einfach den wirklich guten Quellcode von Umpani, animierst es noch schön und dann müsste es eigentlich klappen. In der DXImageList musst du vor dem Animieren aber noch die Größe jedes Sprites einstellen, so wie Umpani es gemacht hat, also die PatternHeight und PatternWidth. Die Animation spielst du aber am besten nicht komplett ab, sondern nur inwieweit man sich bewegt, danach setzt du den animation-start auf den aktuellen Frame des Sprites... und mach das looped aus!
Ach ja und stopf die beiden Richtungen in einen Sprite rein.
Tjoa, und ansonsten so: Mach das DXDraw.Flip nur am Ende des DXTimers einmal hin, das genügt vollkommen.

Greetz,
Knuddelbaer
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Sa 14.06.03 12:42 
Eine Korrektur noch von mir:

Ich habe bei der Parabelfunktion eine Konstante mit dem Absprungwinkel.
Dieser Konstante habe ich einen wert "45" zugewiesen.

Dies ist falsch. Der Absprungwinkel wird im Bogenmaß angegeben also von "0" bis "1" z.b. "0.6"


Nur zur Information

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: Sa 14.06.03 12:58 
Deswegen siehts auch leicht komisch aus am anfang vom sprung, wa?
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Sa 14.06.03 13:08 
Mag sein.

Wie gesagt, ich habe mich nicht lange damit beschäftigt (max. ne Stunde). Es sollte ja auch nur ne Anegung sein. :)

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: Sa 14.06.03 13:13 
jo aber eine gute Anregung ;)
Ab und zu wackelt die Figur auch nen bissel und blinkt für ganz kurze Zeit ausserhalb des Fensters... aber naja, was solls *g* Ist trotzdem ein gutes Beispiel.