Kezdőoldal » Számítástechnika » Programozás » Free Pascal-ban hogyan kell...

Free Pascal-ban hogyan kell animációt készíteni?

Figyelt kérdés

Free Pascal-ban kéne megoldani valahogy, hogy nyilakkal tudjak mozgatni pl. egy kört.

Próbáltam letörölni a képernyőt és újrarajzolni mindent az új koordinátákba, de így villódzik. Szóval a cleardevice; nem vált be. Van esetleg valami más megoldás ahol nem fog villódzani a kép?



2017. febr. 18. 23:52
1 2
 11/18 anonim ***** válasza:

Ezt nézd meg:

[link]

ez alapján nekem működött, nem villódzott (Linux alatt, FPC 3.0 alatt Graph helyett ptcgraph-ot használva - ha kiszedem a váltogatás, villog).


A különbségek:

* a ciklus előtt beállítja a látható lapot.

* a ciklus elején váltja a lapot

* tesz bele egy kis késleltetést is

2017. febr. 19. 23:01
Hasznos számodra ez a válasz?
 12/18 A kérdező kommentje:
Amit az alapján írtam villog. Átmásoltam az egész kódot és az is villog nekem.
2017. febr. 19. 23:19
 13/18 tabaki ***** válasza:

@#11:

Gratulálok, én nem voltam képes rátalálni erre a példára. Mekkelek5 megoldása nálam is tökéletesen fut (linuxon, persze ptcgraph unittal), attól eltekintve, hogy a kilépés nem működik.


@Kérdező:

Két megjegyzés:

1. Nem túl szerencsés csonka kódot közölni, akkor sem, ha biztos vagy benne, hogy a hiba nem a hiányzó részekben van -- hátha valaki kísérletezgetne a programoddal. A kódot természetesen ne ide töltsd fel, hanem valami megosztó-oldalra, mondjuk erre (pascalt nem tudsz választani, de ott a Delphi a listában):

[link]

2. Szerintem ezt az egész graph unitos dolgot ne erőltesd túlságosan. Divatjamúlt megoldás, amit valószínűleg csak a régi Turbo Pascallal való kompatibilitás kedvéért tartanak életben egyáltalán. De ezek szerint már Windowson sem az igazi, és linuxon nem is használható, ez aláássa a platformfüggetlenséget szép eszméjét. Kipróbáltad Mekkelek5 programját ptcgraph-fal is?

2017. febr. 19. 23:41
Hasznos számodra ez a válasz?
 14/18 anonim ***** válasza:

#11-es által hozott kódban azért van a delay, mert meg kell várni, amíg a sugár visszatér (V-sync). Erre is hoz példát a prog.hu-s oldal.


Szóval a megoldás kb. úgy néz ki, hogy

- az előtérben az aktív lap látszódik

- rajzolsz a backbufferre

- megvárod, míg végez a v-sync

- gyorsan kicseréled a backbuffert az aktív lapra

- goto 1


Ami fontos, hogy ne 640x480-ba csináld, menj le legalább 640x350-ig, akkor már két lapod lesz.


* EGALo (640 x 200) 4 pages

* EGAHi (640 x 350) 2 pages

* EGAMonoHi (640 x 350) 2 pages

* VGALo (640 x 200) 4 pages

* VGAMed (640 x 350) 2 pages

* VGA (640 x 480) 1 page


Itt a sync függvény, ami addig vár, míg visszatér a sugár:



procedure sync; assembler;

asm

mov dx,03DAh

@1:

in al,dx

test al,1000b

jz @1

end;


Állítólag ez is működik:


procedure WaitRetrace;

begin

repeat until port[$3da] and 8 = 8;

repeat until port[$3da] and 8 = 0;

end;


Ha nem várakotatsz a v-syncre, akkor villogás van (lsd. [link]


Itt egy példakód, nem tudom, működik-e (kb. tíz éve nem láttam Pascalt közelről):



{Setactpg.PAS}


{Sample code for the SetActivePage procedure.}


uses Graph;


var Gd, Gm: Integer;

begin

Gd := Detect;

InitGraph(Gd, Gm, ' ');

if GraphResult <> grOk then

Halt(1);

if (Gd = HercMono) or (Gd = EGA) or (Gd = EGA64) or (Gd = VGA) then

begin

SetVisualPage(0);

SetActivePage(1);

Rectangle(10, 20, 30, 40);

WaitRetrace();

SetVisualPage(1);

end

else

OutText('No paging supported.');

Readln;

CloseGraph;

end.


Egyébként én sem értem, minek szenvedsz ezzel, kismillió másik megoldás van a problémádra.

2017. febr. 20. 08:51
Hasznos számodra ez a válasz?
 15/18 A kérdező kommentje:
Az a baj hogy muszáj az öreg DOSbox-os pascalban. Milyen más megoldás van még ami könnyebb?
2017. febr. 20. 16:43
 16/18 tabaki ***** válasza:

      Ne legyen igazam, de szerintem nem lesz. Miért is lenne más megoldás (azt most tegyük is félre, hogy miért gyötörnénk téged e nyögvenyelős módszerrel, ha volna könnyebb)? A DOS és vele a Graph unit mára jóformán csak szép emlék, üzenet a távoli múltból, Jurassic Park, kövület, stb., egy olyan korból, amelyben a felhasználó boldog volt, hogy egyáltalán módja van grafikus felületen is munkálkodni. A Borland becsületére legyen mondva, hogy a kor színvonalán igazán elegánsan és letisztultan oldotta meg a dolgot.

      Nemrégiben láttam egy kis ismeretterjesztő filmet, amelyben valami német kutatócsoport az ősemberek életét élte néhány hétig. De a vadászat macerás, meg persze az állatvédők sem engedték volna, tehát a vágóhídról szállították nekik a húst és a lenyúzott bőröket, ott állt nekik halomban a teherautóval odafuvarozott, géppel aprított fa, hogy legyen miből megrakni a horda közös tűzhelyét, az ősasszonyok láncfűrésszel otrombán darabolt rusztikus rönkasztalokon bohóckodtak a kovakéseikkel és csonttűikkel... Te ugyanerre vágyol: Meg akarsz maradni a daliás hőskor könnycsordítóan egyszerű eszközeinél, de ha ebből az következik, hogy egy összetettebb feladatot már valamivel fáradságosabb velük megoldani, akkor meg berzenkedel, hogy miért nincs előregyártott megoldás.

      A Graph kevés; mindig is az volt, és a világ már régen elgyalogolt mellette. Most hasonló feladattal ott van az említett PTCGraph, ami egyrészt platformfüggetlen (bizony, a DOSban is használható), másrészt sokkal rafináltabb -- amiből persze éppen nem az következik, hogy „könnyebb” lesz, mint a Graph valójában eléggé szimpla módszerei. De ezen a legelőn tényleg nem terem túl sok fű. Ha tovább akarsz lépni, ismerkedj egyéb, a Turbo Pascal idejében még nem létezett grafikus könyvtárakkal, vagy térj át Lazarusra, amely ennek a tehernek nagyobb részét leveszi a válladról. De az is igaz, hogy az már nem a DOS világa.

      Ha viszont egy ideig még maradnál, ahol vagy, akkor leszel szíves nem a német ősemberekről venni a példát, hanem a valódiakról. Ők ugyanis képesek voltak faékekkel, kődarabokkal, homokkal, meg némi munkával és tudással olyan elképesztő teljesítményeket maguk után hagyni, amelyeket ma milliárdos projektek eszközeivel is csak üggyel-bajjal csinálhatnánk utánuk. Ennek is megvan a maga szépsége, nemcsak a csuklóból odakent könnyedségnek.

2017. febr. 20. 18:16
Hasznos számodra ez a válasz?
 17/18 anonim ***** válasza:
Hallottatok ti az InfoProg versenyről ? Na ott csak DosBox-os feladatot fogadnak el.
2017. febr. 20. 21:12
Hasznos számodra ez a válasz?
 18/18 A kérdező kommentje:
Nagyon szívesen használnék akár lazarust, akár C++ vagy bármilyen más nyelvet. De ez ami most kell ez pascalban kell, nem lehet más.
2017. febr. 20. 21:13
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!