DelphiX :(((

0

Dzień dobry, czy kiedy przesuwa się Sprite
da się poznać poprzednią pozycję Sprite'a
albo tu już nie wiem jak to wtłumaczyć bo nie wiem
jak to działa :( czy w procedurze od kolizji Spritów
można poznać miejsce kolizji (współrzędne X,Y) ?--__________________________________
Pozdrawiam...
piechnat

0

Zalezy jakim sposobem przesuwasz sprity bo jesli przesuwasz wedlug szybkosci i kierunku to sawsze mozesz
podac wartosci przeciwne. Wszystko zalezne od metody poruszania.

A co do wsporzednych to mozna wspozedne globanle odczytac ( chyba ) z worldx i worldy.

---=-OiDnus-=-

0

oidnus napisał:
Zalezy jakim sposobem przesuwasz sprity bo jesli przesuwasz wedlug szybkosci i kierunku to sawsze mozesz
&gtpodac wartosci przeciwne. Wszystko zalezne od metody poruszania.
&gtA co do wsporzednych to mozna wspozedne globanle odczytac ( chyba ) z worldx i worldy.

dzięki, tyle że już zmieniłem koncepcję, na platformówkę i mam teraz
problem z grawitacją, tzn konkretnie JUMPem żeby zrobić regularne
szybkie przesunięcie Sprita w góre, bo opadnie i chodzenie działa--__________________________________
Pozdrawiam...
piechnat

0

Witam.
Tez pisze gierke (prymitywna). Mam nadzije, ze nie robisz skoku o ksztalcie paraboli. Jak chcesz to skorzystaj z mojego "skakania". Oto kodzik:

var
NowUp : Boolean; *Zmienna, ktora blokuje grawitacje podczas skoku
X, Y : Integer; *Wspolrzedne Twojego Sprita

procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);

begin
if (Key = vk_Up) then
begin
NowUp := True; *ze skok jest wykonywany i Grawitacja "nie dziala"
Dec(Y, 2); *Podnosi Sprite'a o 2 pixele w gore
end;
end;

procedure TMainForm.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);

begin
if (Key = vk_Up) then
NowUp := False;
end;

procedure TMainForm.DXTimer1Timer(Sender: TObject; LagCount: Integer);

begin
if NowUp = False then
Inc(Y, 2);
end;

To tylko taki skrot skakania. Pisze skrot, poniewaz obsluguje to tylko pionowy skok w gore oraz nie ma ogranicznika jak wysoko mozesz skoczyc. Reszte musisz sobie sam dopisac:).--Delphi vs. Visual C++ = ?:?

0

wiem o co chodzi (chyba ;))

*tworzymy rekord
type
Tobiekt = record
Postac_X : Integer;
Postac_Y : Integer;
col_x : Integer;
col_y : Integer;
end;

*w public dajemy procedurke
procedure kolizja();
procedure rysowanie();
procedure poprzednia_pozycja();

*kilka zmiennych globalnych
var
Postac : TObjekt; *zmienna postac typu TObjekt
o_ile_x : Integer = 10; *zmienna okreska o ile bedziemy sie poruszali

*teraz podczas nacisnicia przycisku w dxInput np
If (IsRight in DxInput.States) then
begin
Postac.Pottac_X := Postac.Pottac_X + 10; *chyba nie musze kometowac ;)
o_ile_x := +10
* ta zmienna okresla ze dodalismy 10 do pozycji, a gdybys ruszal sie w lewo
* to bys przypisal -10 , patrz nizej
kolizja(); *wywolanie procki
rysowanie(); *wywolanie procki
poprzednia_pozycja(); *wywolanie procki
end;

procedure TForm1.kolizja();
begin
if (nx+10) &gt nx_przeszkody) then *jesli nie rozumiesz to napisz :)
*najlepiej zrob sobie drugi rekord - przeciwnika i nx_przeszkody to bedzie Przeciwnik.Pozycja_X
Postac.col_x := Postac.Postac_X; * i tu masz x_kilizji
Postac.col_y := Postac.Postac_Y; * a tu y kolizji
end;

procedure TForm1.rysowanie();
begin
DxImageList.Item.Find('postac').draw(DxDraw.Surface,Postac.Postac_X,Postac.Postac_Y,0);
DxDraw.Surface.Canvas.Release;
DxDraw.Flip;
end;

procedure TForm1.poprzednia_pozycja();
var pop_poz_x : Integer;
begin
pop_poz_x := Postac.Pozycja_X - o_ile_x; * a tu jest po prostu pozycja aktualna odjac 10 lub - 10 zalezy gdzie sia ruszyles ostatnio
*tu sobie mozesz wyswietlic jakims TextOut poprzednie pozycje
end;

to nie jest pelny kod !!!
Dodaj jeszcze rekord "przeciwnik", kilka zmiennych (ja dalem tylko reagowanie na osi X)
w razie pytan wal smialo :D

--Source of life - Programming,
Skateboarding,
Metal.

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