Diskuze: Výkon her v Javě
Tvůrce
Zobrazeno 22 zpráv z 122.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Mono nainstalované mám, ale neběží v něm všechno, takže mám smůlu. Na druhou stranu tady mám dostatek jiných programovacích jazyků.
Neviděl jsem zatím nějakou úspěšnou multiplatformní aplikaci v Monu. Nejspíš to bude tím, že to není nějak extra dokonalé Možná jich je pár méně známých na Linux/iOS, ale na android? Ten občas skoro nezvládá Javu, natož emulaci C#...
mal som podobný nápad ale ja som túto tému ukončil komentárom "ok" a niekto sa zase začal hádať...
Další smysluplný komentář k tématu který tu naprosto jistě nerozpoutá další vlnu flamu když se mi ji konečně podařilo uklidnit!
Ono s tím Androidem jak kdy že? Přece jenom Androidu bych dal ještě chvilku času. Jeho vývoj aby byl Android dokonalý bude trvat ještě dloooouho.
Než se C# přizpůsobí Androidu, bude na něm Java fungovat už dlouho.
Což je celkem logické když Android na Javě stojí že.
Ono to zas tak úplně logické není. Mohl by tam být i C#, kdyby se Microsoft trochu snažil. Mohl by tam být Lisp (mám ve svém PDA), mohl by tam být Python, Lua nebo cokoliv jiného. Je to otevřený systém.
Ano mohl by tam být Lua, Ruby, Python ale nemyslím si že by se Microsoft měl snažit s C#. Přeci jenom asi těžko by chtěli dobrovolně podporovat konkurenci když ho sami mohou implementovat do Windows phone. Což také dělají.
Když se Microsoft nebude snažit dát C# do Androidu, tak tam nebude. A Java bude mít navrch.
Ten jeho Windows Phone vypadá na propadák, takže pokud se nebude snažit, zůstane C# jen na jeho desktopech a serverech.
A myslím že i tak to budou výdělky dost dobré na to aby ho to minimálně ještě na pár let uživilo. A ano Windows Phone je propadák. Už vzhledem k tomu do jak (ne)výkoných zařízení je cpe.
Udělal jsem si jednoduchý benchmark v Javě. Určování vzdáleností je
ve hrách častá operace, používá se Pythagorova věta. Zkusil jsem si tedy
do proměnných a
, b
uložit souřadnice bodů a
spočítat jejich vzdálenost.
c=Math.sqrt(Math.pow(a[0]-b[0],2)+Math.pow(a[1]-b[1],2));
Čas: 300 ns
c=Math.sqrt((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1]));
Čas: 20 ns
Výsledek byl v obou případech stejný, ale ten druhý byl 15× rychlejší. Jen pro zajímavost: Ten druhý byl spočítán stejně rychle, jako v C i ve Fortranu.
Z toho je vidět, že některé funkce, jako např. Math.pow()
jsou velmi drahé. Zrovna tuto funkci vůbec není radno používat k
umocňování na druhou a je lepší použít násobení. Pokud se ještě
navíc každá složka souřadnic vytahuje z objektu samostatným getterem, je o
lenivost programu postaráno.
Takových velmi často volaných funkcí je víc než dost a jejich nesprávné používání může velmi zpomalit aplikaci bez ohledu na to, jestli je to v C#, Javě, C++ nebo i v jiném jazyku.
c=Math.sqrt((a.getX()-b.getX())*(a.getX()-b.getX())
+(a.getY()-b.getY())*(a.getY()-b.getY()));
Tak jsem si zkusil v Javě ještě tuhle hrůzu, která mi ale poskytla velmi
pěkný výsledek 20 ns. Tedy stejný jako v předchozím případě bez
použití Math.pow()
a srovnatelný s C či Fortranem. A to při
použití objektů s privátními proměnnými a gettery.
Java není pomalá.
No vypadá to zajímavě ale áte to někdo ozkoušené?
Myslel jsem alespoň tu free trial. Vyzkoušel bych sám ale nemám tu zrovna nejrychlejší net.
Tak jsem ještě chvíli v tuningu pokračoval, aby to bylo rychlé a hezké. Výsledek se dostal lehce pod 20 ns. Z celé třídy uvádím jen podstatnou část, která je stejně rychlá jako v C a přitom je objektová. Napsal jsem ji staticky, aby se dala vyhodnotit vzdálenost různých objektů, ale není to podstatné.
import java.lang.Math;
public class Vect {
private double x,y;
public static double diff(Vect a, Vect b) {
double x=a.getX()-b.getX();
double y=a.getY()-b.getY();
return Math.sqrt(x*x+y*y);
}
}
Celá třída je na http://www.itnetwork.cz/dev-lighter/50
potom nemám ani androida ani inakouslejabko systém, neboť mám univerzál s windows mobile 6.5 a jsem velmi spokojen, pokud zrovna nezlobí
Dobrá moment zkusím to vyzkoušet tak za hoďku dám vědět svoje první zkušenosti .
Ještě jsem tu třídu zjednodušil. Vyházel jsem nepotřebné gettery a settery. Ponechal jsem jen to nejnutnější. Možná někomu připadne podivné, že Java umožňuje přímo sahat na privátní proměnné sourozenců, ale je to tak. Možná i proto se v Javě tolik getterů/setterů nepíše.
Zobrazeno 22 zpráv z 122.