Autor | Zpráva | ||
---|---|---|---|
yFang Profil |
#1 · Zasláno: 29. 6. 2012, 18:20:19
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 |
#2 · Zasláno: 29. 6. 2012, 21:07:38
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 |
#3 · Zasláno: 29. 6. 2012, 21:17:35
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>'; text += '<a onclick="setSpeed('+speed+')" class="'+c+'"></a>'; Taktiež s uhlom. Ale to je len detail |
||
yFang Profil |
#5 · Zasláno: 29. 6. 2012, 23:12:47
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 |
#6 · Zasláno: 30. 6. 2012, 20:58:59
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 |
#7 · Zasláno: 30. 6. 2012, 23:58:01
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 * |
#8 · Zasláno: 1. 7. 2012, 11:01:25
No, já sice javascript neumím natolik abych mohl komentovat, ale ta hra je pěkná :D.
|
||
Beavis Profil |
#9 · Zasláno: 2. 7. 2012, 09:46:27
yFang:
V Chromu je to pořád rozbité. :-( |
||
Časová prodleva: 12 let
|
0