Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
skála
Založen: 07. 07. 2014 Příspěvky: 22 Bydliště: Klatovy
|
Zaslal: 13. srpen 2014, 18:01:05 Předmět: |
|
|
Ještě když jsem používal unitu graph, tak jsem měl "textury" uložené do datového souboru jako pole 300*300 kde hodnota daného bodu byla barva pixelu. Ze začátku chci použít tyto soubory a teprve potom začnu požívat .jpg nebo podobné. Jenom by mě zajímalo, jak se do datového souboru ukládá nebo z něj čte. Stačí jen kousek kodu, nemusíš to sem kopírovat celý jestli nechceš.
Díky |
|
Návrat nahoru |
|
 |
JC
Založen: 06. 10. 2007 Příspěvky: 137
|
Zaslal: 13. srpen 2014, 20:44:47 Předmět: |
|
|
S binárníma souborama se dá pracovat např. nějak takhle - soubor se celý načte do paměti. Je to mix funkcí ZenGL (načtení) a Lazarusu (uložení). Snad postačí. HexMap obsahuje pole hexů.
Jinak pokud bys ten svůj formát nechtěl zobrazovat pixel po pixelu dá se vytvořit "OpenGL textura" a editovat v ní jednotlivé pixely - http://zengl.org/forum/index.php/topic,557.msg3436.html#msg3436
kód: |
uses
zgl_main, zgl_math_2d, zgl_log, zgl_file, zgl_utils, zgl_memory, zgl_types, Classes;
Type
THex = record
x, y : integer;
id : integer;
x_id, y_id : integer;
texture : zglPTexture;
terraintype : byte;
end;
THexMap = record
x, y, // x,y coordinates,
w, h : integer; // Map width, height in hex // = rows and colls
// ..
// Hexes
Hex : array of array of Thex; // Hexagons
Count : integer; // Hex count
end;
Var
HexMap : THexMap;
procedure LoadMap(filename: UTF8String);
var
i, i2 : integer;
rdata: THex;
_m: zglTMemory;
begin
mem_LoadFromFile(_m, filename);
if _m.Size = 0 then Exit;
mem_read(_m, HexMap.DataFormatVersion, sizeof(HexMap.DataFormatVersion));
// X Y
mem_read(_m, HexMap.x, sizeof(HexMap.x));
mem_read(_m, HexMap.y, sizeof(HexMap.y));
// W H
mem_read(_m, HexMap.w, sizeof(HexMap.w));
mem_read(_m, HexMap.h, sizeof(HexMap.h));
// ..
for i := 0 to (HexMap.w -1) do
for i2 := 0 to (HexMap.h -1) do
begin
mem_read(_m, rdata, sizeof(THex));
HexMap.Hex[i][i2] := rdata;
end;
mem_Free(_m);
end;
procedure SaveMap(filename: UTF8String);
var
FS : TFileStream;
i, i2 : integer;
c : integer;
begin
try
FS:=TFileStream.Create(filename, fmOpenWrite or fmCreate);
FS.WriteBuffer(HexMap.DataFormatVersion, sizeof(HexMap.DataFormatVersion));
// X Y
FS.WriteBuffer(HexMap.x, sizeof(HexMap.x));
FS.WriteBuffer(HexMap.y, sizeof(HexMap.y));
// W H
FS.WriteBuffer(HexMap.w, sizeof(HexMap.w));
FS.WriteBuffer(HexMap.h, sizeof(HexMap.h));
// ..
// each Hex
for i := 0 to (HexMap.w -1) do
for i2 := 0 to (HexMap.h -1) do
begin
FS.WriteBuffer(HexMap.Hex[i][i2], sizeof(THex));
inc(c);
end;
finally
FS.Free;
log_Add('Editor - Map saved: '+filename);
end;
end;
|
|
|
Návrat nahoru |
|
 |
skála
Založen: 07. 07. 2014 Příspěvky: 22 Bydliště: Klatovy
|
Zaslal: 25. srpen 2014, 09:27:20 Předmět: |
|
|
Tak jsem udělal konečně primitivní hru, kde chodí tučňák po obrazovce. Ještě mám dotaz, zda jde nastavit, kolikrát se má projít hlavní smyčka za sekundu. Potřebuju to, aby se mi tučňák pohyboval pořád stejně rychle bez ohledu, jak dlouho trvá jeden cyklus. Zatím to řešim tak, že udržuju 60 FPS tím, že měním hodnotu příkazu sleep, který mám v proceduře draw. Stejně mi ale FPS lítá od 50 do 80. Koukal jsem se na demo07, co je v Zengl, ale nenašel jsem to tam, i když to tam musí být, protože ty tučňáci se pohybují stejně rychle bez ohledu na to, kolik má hra FPS.
Díky za předchozí rady, už načítam datové soubory a taky vykresluju objekty jako textury a už ne pixel po pixelu. |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 25. srpen 2014, 09:40:08 Předmět: |
|
|
resi se to tak, ze nepohybujes tucnakem a dany pevny krok v kazdem snimku ale pocitac si FPS a pohybujes nim o drahu, kterou by urazil za cas od posledniho snimku, pak je to FPS nezavisle |
|
Návrat nahoru |
|
 |
skála
Založen: 07. 07. 2014 Příspěvky: 22 Bydliště: Klatovy
|
Zaslal: 25. srpen 2014, 09:44:13 Předmět: |
|
|
Takže posun objektu při každém průchodu smyčkou bude (dráha za sekundu)/FPS. Tyto výpočty bude asi dobrý umístit do procedury update? |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 25. srpen 2014, 09:56:08 Předmět: |
|
|
Doporučuju spíš násobit prodlevou mezi snímky než dělit FPS . Jo je to do update, místo pozice.x += posunKonstantaPro60Fps budeš mít pozice.x += (posunKonstantaPro60Fps * 60) * prodlevaMeziSnímkyVSekundách. _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 25. srpen 2014, 10:05:18 Předmět: |
|
|
skala> dalsi moznost je mit update s pevnym casovym krokem a v kazdem snimku provest tolik update s pevnym krokem, abys dorovnal cas "ve hre" s realnym. Napr.
kód: |
const stepSize = { sem dopln velikost casoveho kroku };
var inGameTime; { Uvodni hodnotu nastavis nekde pri inicializaci }
procedure UpdateFixedStep()
begin
{ Update pro pevny casovy krok }
end
procedure Update()
begin
while inGameTime + stepSize <= getCurrentTime() do
begin
UpdateFixedStep();
inGameTime := inGameTime + stepSize;
end
end
|
_________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
skála
Založen: 07. 07. 2014 Příspěvky: 22 Bydliště: Klatovy
|
Zaslal: 25. srpen 2014, 10:10:17 Předmět: |
|
|
Ještě jeden dotaz, prč je lepší psát výpočty do procedury update? Zpracovává to výpočty v ní rychleji nebo proč? |
|
Návrat nahoru |
|
 |
JC
Založen: 06. 10. 2007 Příspěvky: 137
|
Zaslal: 25. srpen 2014, 10:12:22 Předmět: |
|
|
dt by měla být ona prodleva mezi snímky jak píše Ladis, ale nutno otestovat
Já jednoduše zafixoval FPS pomocí VSync. Pokud má někdo lepší grafickou kartu stejně mu začnou při vysokém počtu snímků pískat cívky. Akorát teď přemýšlím, jestli to něco s prodlevou mezi snímky řeší V mé hře se defakto nic moc nepohybuje, ale zkuším.
kód: |
scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, TRUE ); |
Rychlejší výpočty v update nejsou, ale pokud bys měl složitější kalkulace v Draw mohl bys mít na obrazu různé artefakty atd. |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 25. srpen 2014, 11:27:12 Předmět: |
|
|
JC> Na pomalejším počítači budeš mít FPS omezené VSyncem nižší. A nechápu, jak REFRESH_MAXIMUM omezí na tebou požadované (chápal bych natvrdo třeba 60 fps). Jinak pískání může na druhém počítači naopak být v 60 Hz a nebýt v >60 Hz . _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
JC
Založen: 06. 10. 2007 Příspěvky: 137
|
|
Návrat nahoru |
|
 |
skála
Založen: 07. 07. 2014 Příspěvky: 22 Bydliště: Klatovy
|
Zaslal: 25. září 2014, 17:26:38 Předmět: |
|
|
Zdravim, po dlouhé době zase prosim o radu. Jak se v zengl přepínají scény(stavy). Vytvářím hru, která bude mít menu, náhled mapy a vlastní herní obrazovku a nechce se mi to řečit tak, že ve funkci draw budu mít 3x podmínku if pro každou obrazovku.
Díky |
|
Návrat nahoru |
|
 |
Mem

Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 25. září 2014, 18:28:10 Předmět: |
|
|
Jinak kdo plánujete trochu do budoucna, tak počítejte jednak s FreeSync (nebo G-Sync) monitory, a pokud se povede Carmackovi přesvědčit Samsung a další výrobce na high-fps displeje (pro začátek aspoň se selektivním překreslováním nebo simulací interlace třeba ob 16 řádků pro 1kHz), tak počítejte i s tímhle. Pevná fps s VSync a nedejbože triple buffery je slepá cesta
(OK jsem trochu nahypovaný z Carmackových tech-talků na Oculus Connectu ) |
|
Návrat nahoru |
|
 |
JC
Založen: 06. 10. 2007 Příspěvky: 137
|
Zaslal: 25. září 2014, 20:13:19 Předmět: |
|
|
skála napsal: |
Zdravim, po dlouhé době zase prosim o radu. Jak se v zengl přepínají scény(stavy). Vytvářím hru, která bude mít menu, náhled mapy a vlastní herní obrazovku a nechce se mi to řečit tak, že ve funkci draw budu mít 3x podmínku if pro každou obrazovku.
Díky |
Ahoj,
scény v ZenGL nejsou, budeš to muset vymyslet sám Projel jsem kdysi několik zdrojáků kde to bylo impelementovaný (např. http://zengl.googlecode.com/files/mondozengl-0.3-2012.10.02.zip - což je odnož ZenGL) ale zdálo se mi to zbytečně složité. Ty tři podmínky ničemu nevadí, pomalejší to nebude, ale jde to řešit i jinak, kdyžtak o víkendu sem něco pastnu |
|
Návrat nahoru |
|
 |
skála
Založen: 07. 07. 2014 Příspěvky: 22 Bydliště: Klatovy
|
Zaslal: 24. říjen 2014, 15:19:47 Předmět: |
|
|
Zdravim, po dlouhý době mam zase dotaz, jde v zengl nějak zkosit obrázek?
Díky. |
|
Návrat nahoru |
|
 |
|