Jak je to možné? – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak je to možné? – .NET – Fórum – Programujte.comJak je to možné? – .NET – Fórum – Programujte.com

 

Matěj Andrle+1
Grafoman
10. 7. 2014   #1
-
0
-

Dobrý den,
v isometrické políčkové grafice (kosočtverce) o velikosti políčka 52, 26 chodí hrdina 13ti kroky po vektoru (+/-4; +/-2) při rychlosti 50ms. Během této doby nesmí změnit směr - jinak by nebylo zajištěno, že nakonec skončí přesně uprostřed nějakého políčka. Proto lze změnit směr pouze, pokud je Ready a v tom případě si projdu stisklé klávesy, přičemž dle toho volím další možnosti. (kupříkladu popojití dále)

public void Move(int x, int y)
{
	if(Ready = (count++ == Steps))
		count = 0;
	else
	{
		X += x;
		Y += y;
	}
}

Zde není co řešit. Ovšem pro běh jsem zvolil vektor posunu (+/-8; +/- 4), čily-že 2x větší a z toho vyplývá, že by nikdy nemohl skončit přesně uprostřed jakéhokoliv políčka. (ne po běhu o jedno políčko) Zkrátka nejde podělit 13 2ma, či 52 8smi. Proto jsem to řešil různými podmínkami atp. Ale najednou zjišťuji, že stačí 2x zavolat metodu Move při posunu o vektor (+/-4; +/-2). (2x chůze) Nic víc - jen ji 2x zavolám a hrdina končí vždy přesně uprostřed každého políčka. I Ready funguje přesně jak má. Ale 13 nejde podělit 2ma! Jak je to možné? (Běhal jsem kvůli tomu x hodin po bludišti.)
Děkuji.

EDIT:
 

mazeGame.Hero.Move(differenceX, differenceY); // chůze

...

mazeGame.Hero.Move(differenceX, differenceY);
mazeGame.Hero.Move(differenceX, differenceY); // běh - jen 2x chůze
Nahlásit jako SPAM
IP: 78.136.183.–
Kit+15
Guru
10. 7. 2014   #2
-
0
-

#1 Matěj Andrle
Pleteš si herní pole se zobrazováním. Rozděl si to a budeš mít pokoj.

BTW: Poněkud divně pojmenované téma: "Jak je to možné?"

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
10. 7. 2014   #3
-
0
-

#2 Kit
Absolutně tě nechápu. Nemám žádný problém. Naopak - funguje něco, co logicky fungovat nemůže. Grafiku mám totálně oddělenou od logiky. Ptám se přeci - jak je možné, že 1x chůze + vykreslení * 13 dá krásnou chůzi a 2x chůze + vykreslení * 13 nejde podělit 2ma! dá krásný běh...

Nahlásit jako SPAM
IP: 78.136.183.–
Kit+15
Guru
10. 7. 2014   #4
-
0
-

#3 Matěj Andrle
No vidíš, takže jsi to vyřešil. Jenom mi není jasné, proč v herní logice řešíš isometrické zobrazení.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Satik0
Stálý člen
10. 7. 2014   #5
-
0
-

Matěj: Už jste vyřešili, proč se vám to na Win vykreslovalo jinak než v Linuxu? :)

Nahlásit jako SPAM
IP: 46.255.9.–
Matěj Andrle+1
Grafoman
10. 7. 2014   #6
-
0
-

#5 Satik
Tady každý řeší úplně něco jiného... Ne - problém rozhodně není ve výpočtech - neboť Martinovi se špatně vykreslují i pevné objekty. A především - vše jsem pečlivě prošel. Jediné čemu nerozumím je toto - to co tu chci řešit. (Ta chyba o které se zmiňuješ musí být v grafice - v platformě.)

Nahlásit jako SPAM
IP: 78.136.183.–
m4r100
Návštěvník
10. 7. 2014   #7
-
+1
-
Zajímavé

#1 Matěj Andrle
Tebe bych nechtel mit v tymu a pracovat s tvym kodem, na prvni pohled nejde poznat co dela.
1. count++ vs ++count (je ten kod spravne, nebo ne.. to vi jenom autor)
2. Prirazeni do promenne v if podmince.. to jako fakt?

3. Pojmenovani - count (lepsi je currentCountSteps), Steps (maxCountSteps), Ready (readyToMove), atd.

Nahlásit jako SPAM
IP: 62.245.109.–
Kit+15
Guru
10. 7. 2014   #8
-
0
-

#7 m4r10
Ten kód je sice šílený, ale to tady snad neřešíme.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
10. 7. 2014   #9
-
0
-

#7 m4r10
Kdyby to nefungovalo, pak bych se neptal: "Jak to, že to funguje?" Tebe bych nechtěl mít v týmu, pro tvou rýpavost atd. Každopádně - v Listu máš také Count, v ArrayListu také Count,... Kdyby jsi znal OOP, věděl bys, že se vždy na obdobně fungujícím místě používá stejné jméno. Žádné zkratky, či výjimky pro konkrétní aplikaci. Vše má být obecné a stále notoricky se opakující... Na přiřazení hodnoty v podmínce absolutně nic není - v CIL se stejně prvně provede příkaz. Maximální délku vhodného formátu to nepřekračuje. A z kódu absolutně jasně vyplývá co dělá - vždyť i vysvětlení je dostatečné. Nastavuje hodnoty X a Y pouze v případě, že je povoleno ještě jít. Tedy v případě, že count (který se vždy počítá od 0) nedosáhl počtu stanovených kroků k dojití na další políčko. Ve chvíli kdy monstrum dojde na místo, Ready povolí přečtení kláves a tak se provede další akce. Můžete již někdo vysvětlit, jak se dá 13 podělit dvěma, anebo to mám přejmenovat na "Zkritizujte mne prosím co nejnegativněji"?

Nahlásit jako SPAM
IP: 78.136.183.–
Kit+15
Guru
10. 7. 2014   #10
-
0
-

#9 Matěj Andrle
Zkus to přejmenovat na "Jak je to možné?" Možná to bude nejvýstižnější.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
z
~ Anonymní uživatel
268 příspěvků
10. 7. 2014   #11
-
0
-

Ty přece zdvojnásobíš délku kroku, nebo jejich počet. Žádné dělení tam není.

Nahlásit jako SPAM
IP: 213.211.51.–
Matěj Andrle+1
Grafoman
10. 7. 2014   #12
-
0
-

#10 Kit
Diskuze úplně o něčem jiném - i kdybych měl kód z kanálu. Zde řeším úplně něco jiného. Copak to jsem jediný, koho vaše chování irituje? (Především ty vždy půl dne píšeš mimo mísu a radíš zásadně v hádankách - což sice nakonec většinou pomůže, ale do té doby na to přijdu sám.)

Nahlásit jako SPAM
IP: 78.136.183.–
Matěj Andrle+1
Grafoman
10. 7. 2014   #13
-
0
-

#11 z
To jako vážně? Takže když jde 2x tolik, tak neurazí za jeden krok 2x větší vzdálenost? Logika tvrdí, že se to rovná vektoru (+/-8; +/- 4). Jestli ty dokážeš podělit 52 8smi, či 26 4mi, tak jsi génius!

Nahlásit jako SPAM
IP: 78.136.183.–
Kit+15
Guru
10. 7. 2014   #14
-
0
-

#13 Matěj Andrle
My umíme místo dělení násobit.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
10. 7. 2014   #15
-
0
-

#14 Kit
Ano, jdu 2x. Ale vzdálenost se tím zkrátí. Jelikož se zmíněné podělit nedá, nemůže hrdina skončit přesně uprostřed. Jenže on tam skončí! :D A mohu běhat celé dny - stejně se neznepřesní ani o pixel. Jak to, že se count dostane na 0 (což je správně) - a ne na 1?

Nahlásit jako SPAM
IP: 78.136.183.–
Kit+15
Guru
10. 7. 2014   #16
-
0
-

#15 Matěj Andrle
Co máš pořád s těmi pixely? Hrací pole je přece čtvercové, pixely se týkají jen vykreslování do isometrie.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
10. 7. 2014   #17
-
0
-

#16 Kit
Pane bože. Já to vzdávám - jdi se zahrabat... Co si myslíš, že je asi posun o vektor? Posun o X a Y pixelů - jak jinak se má hrdina pohybovat? To má rovnou přeskakovat políčka? Viděl jsi někdy hru, kde hrdina nechodí, ale skáče rovnou po políčkách? Proč vůbec vytahuješ - ne. Tohle s tím zase nesouvisí. Jak může při posunu mezi políčky o rozměrech [52; 26] po krocích o (+/-8; +/- 4) skončit hrdina uprostřed políčka? Čemu na té otázce nerozumíš? Já už nemůžu - to se ani jinak napsat nedá - jinak už to vysvětlit nejde! :D Posouvá se samozřejmě horní okraj obrázku, takže technicky ten obrázek uprostřed není - ale to tu neřeším. Řeším, že 52 se nedá dělit 8smi a 26 4mi!

Nahlásit jako SPAM
IP: 78.136.183.–
Kit+15
Guru
10. 7. 2014   #18
-
0
-

#17 Matěj Andrle
Bylo poněkud nešťastné, že sis zvolil základ 26. Kdyby sis dal 24, tak by se ti to počítalo mnohem lépe, ale nelepší by stejně bylo 32. Bylo by to 8 kroků.

Nevím, proč pořád dělíš, tady se má násobit, sčítat a odečítat. Při transformaci do izometrie se dělení nepoužívá.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
10. 7. 2014   #19
-
0
-

#18 Kit
Já nic nedělím!!!! Copak to nechápeš? Nechápeš nepřímou úměru? Já nic nenásobím, nic nedělím! Jen přičítám/odčítám vektor posunu - kroky! Bavím se o dělení jen proto, že s větším posunem se vzdálenost zkracuje. A nejde přičíst v timeru 8 a 4 tak, aby vyšlo 52, 26! Copak to vážně nechápeš? Nikde v reálu nic nenásobím, nedělím! Je to jen počet opakování - timer!  Copak nechápeš, že jedině 52, 26 mi dá kosočtverec jehož osy jsou souběžné s osami souřadnic? A nechápeš, že tento příspěvek řeší problém, že to funguje? Pročež jsou ta čísla absolutně správně zvolena! Funguje to! Jen nechápu jak... Nechápu jak se mohu přičítáním/odčítáním 8 a 4 dostat k posunu o 52, 26!

public void Move(int x, int y)
{
	if(Ready = (count++ == Steps))
		count = 0;
	else
	{
		X += x;
		Y += y;
	}
}

Kde vidíš dělení? Kde vidíš násobení? Akorát se toto děje v timeru dokud se posun nerovná posunu o políčko...

Nahlásit jako SPAM
IP: 78.136.183.–
Kit+15
Guru
10. 7. 2014   #20
-
0
-

#19 Matěj Andrle
Moment, ty máš herní logiku v izometrii?

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
10. 7. 2014   #21
-
0
-

#20 Kit
Ne! Ne! NE! Znovu - jádro počítá v políčkové grafice. Až úplně poslední vrstva (GUI) si z toho udělala isometriku. Přepočet jsem dal do vrstvy s logikou. Ale to sem sakra vůbec nepatří!!! Jak můžeš nechápat, že tu řeším, že přičítáním 8 a 4 se nedoberu k 52 a 26??? A ptám se, jak to ten můj kód dokázal. Je tu už 2x! Co víc mám udělat - stát na hlavě?

Nahlásit jako SPAM
IP: 78.136.183.–
Kit+15
Guru
10. 7. 2014   #22
-
0
-

#21 Matěj Andrle
Stát na hlavě nemusíš. Stačí, když si napíšeš pár testů a uvidíš to hned.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
10. 7. 2014   #23
-
0
-

   


if(Ready = (count++ == Steps))
	count = 0;
else
{
	X += 8;
	Y += -4;
}

třeba... (Chůze - ta vychází čistě - je logické, že funguje - ale jak funguje ten běh?)

Nahlásit jako SPAM
IP: 78.136.183.–
Kit+15
Guru
10. 7. 2014   #24
-
0
-

#23 Matěj Andrle
Proměnné Ready, X, Y, count a Steps jsou zřejmě instanční. Je možné, že je modifikuješ i v jiné metodě, kterou jsi nám třeba neukázal?

Proč vlastně přiřazuješ do proměnné Ready, když ji nikde nepoužíváš?

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Matěj Andrle+1
Grafoman
10. 7. 2014   #25
-
0
-

#24 Kit
Nauč se číst. Kdybych měnil X a Y externě, nefungovalo by to a vlastně by to celé ztratilo smysl. Monstrum se stará samo o sebe - to je smysl toho objektu. Ready jak už jsem tolikrát psal - používám jako indikátor, kdy si přečíst klávesy a kdy je možné začít dělat jinou akci. Ready je false i třeba při mlácení. (přestat s pěstí těsně u ksichtu - to by bylo hodně divné) Poslal jsem jen tento kód - tak tu jde asi jen o něj. No ne? Parametry už jsem poslal 6 00 000 000 000x - (+/-8; +/-4).

Nahlásit jako SPAM
IP: 78.136.183.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Je to možné? — založil Jiří

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý