Autor Zpráva
yFang
Profil
Trochu jsem si procvičoval JavaScript a vytvořil jsem takovou jednoduchou hru.

http://kdeco.yfang.name/v2/

Úkolem je zničit postupně všechna města s co nejmenším počtem V2.

Zajímal by mě váš názor ohledně kódu, co by se dalo udělat jinak, lépe a proč.
Beavis
Profil
yFang:
V Chrome 20.0.1132.47 se mi jak samotná raketa s odpalištěm, tak město zobrazují úplně nahoře - jsou dokonce z části překryty horní lištou.
Nox
Profil
Prošel jsem to jen zběžně

1) coding standard - tu je mezera navíc, tu namíň, trochu víc dbát na vzhled + matlání češtiny a angličtiny - vyber si
2) extrémně bohatě zastoupená nejprofláklejší chyba použití jQuery - neuskladnění objektu, ale vyhledávání elementů a vytváření jQuery objektu znovu a znovu (někde dokonce ten samý element v cyklu)
3) funkce get* nic nevrací
4) co je proměnná v? Nebylo by lepší "rychlost"?
5) občas nesmyslně použitá globální proměnná (např. ty `c = '';`)
6) = [] se preferuje před = new Array
7) hodnota blocksLeft v definici map je zbytečná, jde vypočíst jako level[i].blocksLeft = level[i].cityBlocks.length
8) hodně použiváš globální proměnné ... aspoň některé by to fakt chtělo nějak abstrahovat, třeba to window.inner* pro rozměry ... když to nebudeš chtít na celé, budeš to muset všude přepisovat
9) ty kompatibilní zápisy ve funkci setAngle by myslim v nejnovějším jQuery neměly být potřeba
10) termín "alpha" se hodně používá pro průhlednost ("alpha channel" / "alfa kanál"), mohlo by to být matoucí
11) do setTimeout nedávej jako argument řetězec ale funkci
SeparateSK
Profil
Beavis:
V Chrome 20.0.1132.47 se mi jak samotná raketa s odpalištěm, tak město zobrazují úplně nahoře - jsou dokonce z části překryty horní lištou.
Taktiež aj mne
Hodilo by sa ak by sa:
 text += '<a onmouseover="setSpeed('+speed+')" class="'+c+'"></a>';
v funkcii getSpeedBar zmenilo na
 text += '<a onclick="setSpeed('+speed+')" class="'+c+'"></a>';
Lebo zakaždým keď chcem tú rýchlosť zmeniť musím z toho speedbaru výjsť spodom , inak sa to zmení na maximum, lepšie by bolo keby som na to musel kliknúť aby sa to zmenilo.
Taktiež s uhlom. Ale to je len detail
yFang
Profil
Beavis:
Už jsem zjistil, čím to je, tak ještě musím zjistit jak to vyřešit.

Nox:
Děkuji za rady, budu se tím dále zabývat.
yFang
Profil
Takže jsem se pokusil ten kód zlepšit
http://kdeco.yfang.name/v2/v2.html

Nox:

2) extrémně bohatě zastoupená nejprofláklejší chyba použití jQuery - neuskladnění objektu, ale vyhledávání elementů a vytváření jQuery objektu znovu a znovu
Teď jsem to upravil tak, že v každé funkci, kde některý z objektů používám jsem si ho uložil do proměnné. Ovšem nevím, jestli by nebylo lepší uložit to rovnou do globálních proměnných a používat to ve všech funkcích.

7) hodnota blocksLeft v definici map je zbytečná, jde vypočíst jako level[i].blocksLeft = level[i].cityBlocks.length
Ale stejně budu muset nejdřív definovat tu proměnnou a hodnotu ji budu moc přiřadit až potom co definuju to pole, podle kterého by se to počítalo. Takže by to znamenalo řádek navíc.

9) ty kompatibilní zápisy ve funkci setAngle by myslim v nejnovějším jQuery neměly být potřeba
Mám tam verzi 1.7.2 a bez nich mi to minimálně ve FF nefunguje.
Nox
Profil
2) j, to by šlo. Normálně by se to buď předalo argumentem nebo u objektů uložilo třeba do nějaké jeho konfigurace, ale když už ty globální použiváš, tak by klidně šly i pro ty elementy ... je jich jen pár a nemění se...
7) to jo, ale ten jeden řádek ti zautomatizuje položku u všech záznamů ... máš lepší si napsat někde řádek navíc a už se pak nestarat, než furt dokola psát a udržovat něco co bys nemusel ... pokud by to nepřineslo nějaké jiné velké nevýhody (což zde ne)
nevimco
Profil *
No, já sice javascript neumím natolik abych mohl komentovat, ale ta hra je pěkná :D.
Beavis
Profil
yFang:
V Chromu je to pořád rozbité. :-(

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: