[DelphiX] znowu :)))

0

Jak robi się w DelphiX taki bajer, że wczytywany jest jeden obrazek,
(np. 400x100) który zawiera 4 klatki, i wyswietla się najpierw
1 cześć (100x100), później druga itd. i tak w kółko, tworząc efekt animacji?
Mam coś takiego w Demie ale ono jest strasznie długie i nie wiem
której części z niego mam się czepić, żeby to znaleŹć :(--__________________________________
Pozdrawiam...
piechnat

0

ZIOMBER robi kurs o DelphiX i jest tam m. in. artykul o Spritach i o animowaniu Spritow. Moja wiedza powie Ci: do takiej animacji nalezy uzyc TSpriteEngine. Wiec troche trzeba poczekac. Ja tez nie moge sie doczekac kiedy wyjdzie:)
P. S. Powodzenia ZIOMBER--Delphi vs. Visual C++ = ?:?

0

Ja bym wczytal obrazek do TDXImageList, nastepnie, ustawil rozmiar na 100x100 i wtedy sa dostepne 4 klatki, rysowanie by bylo mniej wiecej takie
DXImageList.Items[0].Draw(DXDraw.Surface,X,Y,nrKlatki);
nie pamiteam dokladnie bo DelphiX nie uzywam juz z rok :), mozliwe ze bedzie wiecej parametrow.--W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi.

0

sorry ze tak pozno :-)
Powiem jak najdokladniej ;)
wiec tak wstaw na formie :
TDxDraw,
TDxSpriteEngine,
TDxTimer,
TDxImageList;

teraz dodaj ten kod ponizej uses

type *definiujemy nowy typ
TObiekt = class(TImageSprite) *nowa klasa dzidziczaca z TImageSprite
procedure DoMove(MoveCount: Integer); override; *poruszanie postaci
end;

teraz dodaj zmienna glabalna:
Postac : TObiekt; */zmienna postac typu TObjekt

w procedurze FormCreate dodaj kod:

begin
Postac := TObiekt.Create(DXSpriteEngine1.Engine); *stworz postac
Postac.Image := Form1.DXImageList1.Items.Find('Postac');
*jaki obrazek (klatki animacji)
Postac.X := 100; *x postaci na DxDraw
Postac.Y := 100; *y Postaci na DxDraw
Postac.Width := 28; *wysokosc postaci
Postac.Height := 27; *szerokosc postaci
Postac.AnimStart := 0; *zacznij animacje od klatki numer 0
Postac.AnimCount := 5; *i pokaz po kolei 5 klatek(powinenes tyle miec obrazkow w
jednym image'u w DxImageList (nazwij go "postac"))
Postac.AnimLooped := True; *czy odtwarzac animacje ciagle
Postac.AnimSpeed := 30/1000; *predkosc animacji
DxTimer1.Enabled := true *uruchomienie timera
end;

teraz w OnTimer DxTimer wpisz to :

begin
DxDraw1.Surface.Fill(0); *odswierzenie obrazu
DxSpriteEngine1.Move(5);*podaj liczbe klatek animacji do odtworzenia
DxSpriteEngine1.Draw; *wyswietl animacje

DxDraw1.Surface.Canvas.Release; *uwolnij zawartosc surface
DXDraw1.Flip; *i ja wyswietl
end;

teraz procka :

procedure TObiekt.DoMove(MoveCount: Integer);
begin
inherited;
Postac.X := Postac.X +1 -//postac bedie sie przemieszczala w prawo
end;

i jeszcze kilka rzeczy:

  • DxTimer.Interval ustaw na 10;
  • do DxImageList dodaj jeden obrazek z klatkami animacji (5 obrazkow x 50 pikseli w jednym) i nazwij go "postac"
  • w komponentach jako DxDraw dodaj DxDraw1
  • i najwazniejsze ustaw w DxImageList w obrazku postac : PatternWidth na 50;

teraz uruchom i yeahh :)
jesli cos nie dziala to : moj nr gg 1690208
ja tez jeszcze malo wiem ale ci moze pomge ;)

0

Wielkie dzięki {brawo} --__________________________________
Pozdrawiam...
piechnat

1 użytkowników online, w tym zalogowanych: 0, gości: 1