Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 29. červen 2017, 08:45:31 Předmět: |
|
|
Tak tak, seed se dá odvodit třeba podle tý pozice v mapě, nebo i vygenerovat randomem který už má pevný seed - ale to by s těma corrutinama nešlo. Leda bys ten seed vygeneroval předem. V práci generuju obrovský terény (čr i větší) po čtvercových tilech. Když třeba volím náhodně parametry domu, který je na hranici tilu, musí mít generátor domu v obou tilech taky vždy stejný seed (aby byly obě půlky stejný). V tomhle případě ale volím ID polygonu půdorysu.
Pár inspirací:
Pro velmi jednoduchý pseudo random se v shaderech používá tahle funkce:
kód: |
float rand(vec2 co)
{
return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
} |
Na plnotučný random nedoporučuju, ale po úpravě bys tím mohl vytvářet seedy podle XY pozice v mapě.
Další možnost je zkombinovat X Y Z:
kód: |
unsigned int randSeed =
(unsigned int)abs(floor(pos.x())) ^
(unsigned int)abs(floor(pos.y())) ^
(unsigned int)abs(floor(pos.z())); |
nebo
kód: |
unsigned int randSeed =
((unsigned int)abs(floor(pos.x())) << 16) |
(unsigned int)abs(floor(pos.y()));
|
A když už sme u toho randomu, doplním ještě pár zajímavých věcí, který používám a jsou super. Pokud znáš/používáš...tak neva. Třeba si to přečte někdo jiný.
1) nelineární pravděpodobnost:
Když uděláš random od 0.0 do 1.0, tak všechny čísla v tomhle intervalu mají stejnou pravděpodobnost. Pokud ale ty randomy uděláš třeba 2 a vynásobíš je, tak už preferuješ hodnoty blíž 0. (jednou třeba vyjde 0.2, podruhý 0.75, ale vynásobením je výsledek 0.15).
2) výběr objektu na základě zadané pravděpodobnosti:
Řekněme, že máš array, který obsahuje třeba zbraně a chceš hráčovi nějakou náhodně přidělit. Přitom je v tom poli raketomet, který má dostat jen velmi vzácně. A tu vzácnost potřebuješ navíc ovládat podle game designu. Je velmi dobrý napsat si na to obecnou funkci "ProbabilitySelect", která funguje následovně:
- Pro každý objekt v poli máš danou pravděpodobnost jako číslo (int, nebo float..). Může to být druhý pole, property nebo třeba callback funkce.
- nejprve sečteš dohromady pravděpodobnost všech objektů dohromady (S)
- pak uděláš random R v intervalu 0..S (součet pravděpodobností)
- pak procházíš pole objektů a od R odečítáš pravděpodobnost konkrétního prvku v poli
- až R klesne na 0, máš výsledek
Jen i zde musíš myslet na seed (klidně předávat System.Random jako volitelný parametr ProbabilitySelectu).
3) Gaussian Random
Odchylky, který mají vypadat přirozeně, by se měly generovat s normální distribucí. Třeba generuješ stromy (na poušti teda asi spíš kaktusy:) ) a chceš nějakou určitou velikost se zadanou odchylku. Tady je teorie https://cs.wikipedia.org/wiki/Norm%C3%A1ln%C3%AD_rozd%C4%9Blen%C3%AD
a nějaká C# implementace:
https://stackoverflow.com/questions/5817490/implementing-box-mueller-random-number-generator-in-c-sharp _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
micky
Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 29. červen 2017, 11:36:21 Předmět: |
|
|
...Jen ji nikdo nebude číst :-) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 29. červen 2017, 18:16:42 Předmět: |
|
|
...A já bych jí četl... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
joeblack
Založen: 14. 09. 2009 Příspěvky: 66
|
Zaslal: 30. červen 2017, 09:38:02 Předmět: |
|
|
Kniha ! kniha ! |
|
Návrat nahoru |
|
|
Poky
Založen: 29. 06. 2009 Příspěvky: 184 Bydliště: Písek / Plzeň
|
Zaslal: 2. červenec 2017, 17:24:01 Předmět: |
|
|
micky napsal: |
Hehe, semo jeste jednoho dne napise knihu pro vyvojare-samouky. |
To bude pro vývojaře SEMO-uky
PS: Já bych jí taktéž četl. |
|
Návrat nahoru |
|
|
skiparktycoon
Založen: 15. 03. 2012 Příspěvky: 148
|
Zaslal: 2. červenec 2017, 21:29:25 Předmět: |
|
|
Já bych si jí semozřejmě také přečetl. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 3. červenec 2017, 09:13:27 Předmět: |
|
|
Díky za přízeň, byla by to jistě velmi srandovní kniha :-).
Aby tu nebyl takový offtopic, tak prosím případné další zájemce o knihu aby psali SZ. Pošlu obratem číslo účtu a můžete si knihu za několik málo tisícovek zarezervovat :-D _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
skiparktycoon
Založen: 15. 03. 2012 Příspěvky: 148
|
Zaslal: 11. říjen 2017, 08:59:55 Předmět: Dlouhá pauza |
|
|
Po výrazně prodloužených prázdninách jsem se konečně donutil ke hře vrátit.
Při prvním spuštění na mě vyskočili hned tři bugy: silnice jak na horské dráze, auťák zabořený čumákem do písku jak pštrosí hlava a v kabině vybuchl gejzír respawnovanejch panáků jak v dopravní špičce v tramvaji.
Jako by se mi to chtělo pomstít za to dlouhé zanedbávání.
Nicméně. Ve hře už je možný progres kampaní. Mise se dá dohrát (dojet na konec). Přidělí se kredity, XP body. Za ty se dá dokoupit vybavení a vytrénovat posádku a jít do další mise.[/img] |
|
Návrat nahoru |
|
|
|