Java.

Muu yhteisön välinen keskustelu.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Java.

Post by Latexi95 »

Dibalo wrote:Teille, jotka ette halua opetella ohjelmoimaan [Javaa Javan tavalla], vaan pitäydytte itsepintaisesti C++:n konventioissa ja design patterneissa, koska teidän mielestänne C++ on maailman paras:

Onnea työelämään
Sieltäpä se ikävä ja julma totuus sitten tuli. :lol:
EDIT:

Pitäisi kai sitä jossain vaiheessa Javaakin vähän vilkaista, mutta jotenkin se kyllä tuntuu vastenmieliseltä.

Niin muuten te, jotka nyt asiasta tiedätte, voisitte selventää Javan käyttöä "työelämässä". Millaisia sovelluksia sillä yleensä väsätään? Aika vähän minulle nyt tulee mieleen Javalla tehtyjä ohjelmia.

TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Java.

Post by TheFish »

Latexi95 wrote:
Dibalo wrote:Teille, jotka ette halua opetella ohjelmoimaan [Javaa Javan tavalla], vaan pitäydytte itsepintaisesti C++:n konventioissa ja design patterneissa, koska teidän mielestänne C++ on maailman paras:

Onnea työelämään
Sieltäpä se ikävä ja julma totuus sitten tuli. :lol:
EDIT:

Pitäisi kai sitä jossain vaiheessa Javaakin vähän vilkaista, mutta jotenkin se kyllä tuntuu vastenmieliseltä.

Niin muuten te, jotka nyt asiasta tiedätte, voisitte selventää Javan käyttöä "työelämässä". Millaisia sovelluksia sillä yleensä väsätään? Aika vähän minulle nyt tulee mieleen Javalla tehtyjä ohjelmia.

Java lienee suosituin yritysten suurissa tietojärjestelmissä. Varsinaisiin loppukäyttäjän työpöytäsovelluksiin on nykyisin parempiakin kieliä, joten Javaa harvoin käytetään siellä. Githubista voit vilkaista, millaisia Java-projekteja siellä on.
CoolBasic henkilökuntaa
Kehittäjä
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Java.

Post by Sami The Great »

Itse opiskelin Javan käytön noin kuukausi takaperin. Kieli on muutoin melkein sama, kuin C++, mutta itse ainakin koen plussaksi "automaattiset" osoittimet ja olion tuhoamiset, jolloin ei tarvitse turhaa niistä murehtia. Javalla onnistuu aika näppärästi pienten pelienkin teko suht helposti ilman suurta pohjatyötä toisin kuin C++:ssa, jossa pitää tehdä suuri kasa funktioita, sisällyttää ja kääntää kirjastoja ja asettaa monia asetuksia, ennen kuin edes pääsee kunnolla koodailemaan. Grafiikkakirjastojakin javalle löytyy ihan hyvin, ja itse olen nyt käyttänyt sellasita kuin LibGDX, jolla pystyy myös tekemään Androidille sovelluksia. 3D-softat, raskaammat ja laajemmat projektit kuitenkin jättäisin C++:lle ihan vain paremman tuen vuoksi (javalla ei mielestäni ole oikein kunnollisia ja aktiivisia 3D-kirjastoja vielä ainakaan, jos vertaa esim. Ogre3D jne. eillei sitten suoraan halua OpenGL koodata.)
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Java.

Post by KilledWhale »

Sami The Great wrote:Itse opiskelin Javan käytön noin kuukausi takaperin. Kieli on muutoin melkein sama, kuin C++, mutta itse ainakin koen plussaksi "automaattiset" osoittimet ja olion tuhoamiset, jolloin ei tarvitse turhaa niistä murehtia. Javalla onnistuu aika näppärästi pienten pelienkin teko suht helposti ilman suurta pohjatyötä toisin kuin C++:ssa, jossa pitää tehdä suuri kasa funktioita, sisällyttää ja kääntää kirjastoja ja asettaa monia asetuksia, ennen kuin edes pääsee kunnolla koodailemaan. Grafiikkakirjastojakin javalle löytyy ihan hyvin, ja itse olen nyt käyttänyt sellasita kuin LibGDX, jolla pystyy myös tekemään Androidille sovelluksia. 3D-softat, raskaammat ja laajemmat projektit kuitenkin jättäisin C++:lle ihan vain paremman tuen vuoksi (javalla ei mielestäni ole oikein kunnollisia ja aktiivisia 3D-kirjastoja vielä ainakaan, jos vertaa esim. Ogre3D jne. eillei sitten suoraan halua OpenGL koodata.)
Örh.

Onhan se toki kiva kun on automaattista roskankeruuta yms. mutta se toisaalta opettaa huonoille tavoille. Ethän sinä heitä kadullekaan karkkipussia, vaikka tiedät että joku sen tulee sieltä joskus siivoamaan.

Eräällä kisamatkalla pohdittiin, että miksi java on poikkeuksena ohjelmointikisoissa sen puolesta, että joissain se on kielletty ja toisissa sille joudutaan antamaan suuremmat maksimisuoritusajat. Kuulemma johtunee hyvin pitkälti siitä, että java on raskasta ja sitä käyttävät koodarit eivät monestikaan pyri yhtä täydellisiin ratkaisuihin kuin muilla kielillä.

C++ ei todellakaan tarvi paljoa säätämistä ennen kuin pääsee koodaamaan. Itse kirjoitan C++-koodipätkän ja painan geanyssa F9 + F5. Ei kuulosta vaikealta, eihän? Vaihtoehtoisesti voin kääntää myös komentoriviltä sanomalla g++ koodi.cpp -o koodi. Ei kuulosta vaikealta, eihän?
Jos haluan olla oikein hurja ja käyttää esim. SDL:ää, lisään geanyn asetuksista linkkerille -lSDL -lipun tai välitän sen suoraan g++:lle. Ei kuulosta vaikealta, eihän?

Isompiin projekteihin on toki kiva kirjoitella makefileä tai käyttää IDE:tä, mutta pientä pohjatyötä joutunee tekemään kielellä kuin kielellä. Valmiiden kirjastojen määrä on rajaton eikä niitä joudu kääntämään itse kovinkaan usein. Tällöinkin homma hoituu lähes automaattisesti. Linuxilla niiden hankkiminen on vieläkin helpompaa, kun ne saa usein suoraan repositoryista. Tämänkin takia olen sitä mieltä, että windows ei sovellu koodaamiseen laisinkaan.
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Java.

Post by Latexi95 »

Tuli tässä mieleen, että miksi ei olla kehitetty ohjelmointikieltä joka kääntää ohjelman välikielelle ja ohjeilmointi ja testaus vaiheessa vielä välikielestä täysin tietylle koneelle optimoiduksi. Sitten, kun ohjelmaa haluttaisiin levittää tehtäisiin asennuspaketti, joka sisältäisi kääntäjän joka osaisi kääntää välikielen natiiviksi konekieleksi laitteistolle optimoituna. Tällöin lopputuloksena olisi täysin koneelle optimoitu ohjelma. Tietenkään tätä asennusohjelman tekemää ohjelmaa ei voisi jakaa kunnolla, koska se ei välttämättä toimisi erilaisella alustalla, mutta aika harva ainakaan kaupallinen ohjelma haluaisi tulla levitetyksi ympäriinsä. Jos tälläisen ohjelmatiedoston haluaisi levittää, siis vain pelkästään ohjelmatiedoston (exen), niin sen voisi laittaa pieneksi "asennustiedostoksi" joka vain kääntäisi sen alustalle sopivaksi.
Tässä mielestäni yhdistyisi JIT-kääntämisen etu eli tehokas laitteistooptimointi, sekä perinteisen valmiiksi käännetyn etu eli JIT-kääntämisen tarpeettomuus. :D
Tälläinen idea tuli mieleen. Onko tässä suunnitelmassa pahojakin virheitä?


Että tämä viesti ei menisi kokonaan offtopikiksi, niin vähän kommentoin KW:n kirjoitusta.
Kieltämättä oikeilla työkaluilla ja pienellä asian tuntemuksella C/C++:san käyttö ei loppujen lopuksi ole niin vaikeata. Ja vaikka Windowsia käytänkin, niin täytyy peesata KW:ta tuossa linuksin eduissa ohjelmoinnissa. Sillä ei kaiketi ainakaan KW:n hehkutuksen mukaan tarvitse huolehtia kaiken maailman poluista kirjastoille ja headereille, mikä on kyllä selvästi Windows + C/C++ yhdistelmän heikkous.

Ja olen kyllä myös samoilla linjoilla KW:n kanssa myös roskien keräyksen suhteen. Ei se ole niin vaikeata laittaa yhtä riviä koodia johonkin destruktoriin tai funktioon, jolla se yksi varattu muistin pätkä saadaan poistettua. On vastuutonta jättää tavaraa ympäriinsä ja olettaa, että muut keräävät (mikä kyllä tietysti on ideana roskien keräyksessä). On paljon helpompaa heittää se itse roskiin. Tämä pätee myöskin oikeassa elämässä eikä vain koodaamisessa.

Olen huomannut tälläisen jutun, mikä tuntuu pätevän ainakin ohjelmointikieliin: Jos jokin on suunniteltu helpoksi, niin sillä on helppo tehdä helpot asiat. Mutta kun helpoksi suunnitellulla koitettaan tehdä jotain monimutkaista ja haastavaa, niin asia muuttuukin todelliseksi kikailuksi ja asiasta tulee hankalempaa kuin pitäisi. Vaikeammilla ja yleispätevimmillä asioilla taas on yhtä tasaisen helppo tai vaikeata tehdä asiat oli se itse asia hankala ja monimutkainen tai sitten helppo.

C/C++:n oleminen varsin matalantasonkieli suhteessa nyt esimerkiksi Javaan on sekä sen etu että haitta. C/C++:ssa on monia ominaisuuksia joita Javassa ei ole, mutta Javassa taas monet asiat on tehty helpommiksi kuin C/C++:ssa, osaksi tosin syynä on C/C++:n vanhuus. C/C++:ssa on mahdollista sorkkia asioita (sekä hyvässä että pahassa) joihin Javalla ei ole mahdollista päästä. C/C++:n yksi suurimmista vahvuuksista on tietysti se että se on muodostunut jonkinlaiseksi standardiksi. On hyvin vähän asioita, mihin ei löytyisi kirjastoa C/C++:n puolelta, mutta jostain muusta ohjelmointikielestä löytyisi.

Huhuh... Tulipas pitkä viesti. Olenkohan koskaan kirjoitanut tänne näin pitkää viestiä. Toivottavasti tähän mahtui jotain asiaakin. :lol:
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Java.

Post by Feuer »

KilledWhale wrote: Onhan se toki kiva kun on automaattista roskankeruuta yms. mutta se toisaalta opettaa huonoille tavoille. Ethän sinä heitä kadullekaan karkkipussia, vaikka tiedät että joku sen tulee sieltä joskus siivoamaan.
Toisaalta olet aivan oikeassa, toisaalta kun aletaan keskustelemaan huonoista ja hyvistä tavoista, päästään nopeasti tähän
Eräällä kisamatkalla pohdittiin, että miksi java on poikkeuksena ohjelmointikisoissa sen puolesta, että joissain se on kielletty ja toisissa sille joudutaan antamaan suuremmat maksimisuoritusajat. Kuulemma johtunee hyvin pitkälti siitä, että java on raskasta ja sitä käyttävät koodarit eivät monestikaan pyri yhtä täydellisiin ratkaisuihin kuin muilla kielillä.
En osaa kommentoida kun ainoa ohjelmointikisa johon olen osallistunut on tämänvuotinen taitajakisa, jossa testattiin PHP-taitoja, mutta idioottihan sellainen on joka ei pyri optimaaliseen ratkaisuun kielestä riippumatta.
C++ ei todellakaan tarvi paljoa säätämistä ennen kuin pääsee koodaamaan. Itse kirjoitan C++-koodipätkän ja painan geanyssa F9 + F5. Ei kuulosta vaikealta, eihän? Vaihtoehtoisesti voin kääntää myös komentoriviltä sanomalla g++ koodi.cpp -o koodi. Ei kuulosta vaikealta, eihän?
Jos haluan olla oikein hurja ja käyttää esim. SDL:ää, lisään geanyn asetuksista linkkerille -lSDL -lipun tai välitän sen suoraan g++:lle. Ei kuulosta vaikealta, eihän?
Myönnän C++-leikkieni rajoittuvan windowsiin ja VC++aan, mutta javalla kirjaston käyttöön vaaditaan, öö, .jar:in tuonti IDEen ja oikeiden pakkausten importit. (V)C++lla, lataa kirjasto _ties mistä_ (Windows-spesifinen ongelma :)), säädä polut IDE:n syövereistä (ymmärtääkseni myös paremmin naapurimaailmassa), toivo että dokumentaatiota on ja että se on kartalla, includeta satunnainen kasa headereita, kesytä linkkeri (etenkin SMFL:n kanssa sai rehellisesti arvailla että mitä pitäisi linkata mukaan), ja käytä. Jotenkin tykkään tuosta ensimmäisestä tavasta enemmän, etenkin kun java-kirjastoilla on tapana heittää vähemmän kryptisiä "Unhandled exception" - poikkeuksia täysin käsittämättömissä paikoissa :)
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
Dimple
Active Member
Posts: 103
Joined: Wed Nov 17, 2010 5:43 pm

Re: Java.

Post by Dimple »

Feuer wrote:
Eräällä kisamatkalla pohdittiin, että miksi java on poikkeuksena ohjelmointikisoissa sen puolesta, että joissain se on kielletty ja toisissa sille joudutaan antamaan suuremmat maksimisuoritusajat. Kuulemma johtunee hyvin pitkälti siitä, että java on raskasta ja sitä käyttävät koodarit eivät monestikaan pyri yhtä täydellisiin ratkaisuihin kuin muilla kielillä.
En osaa kommentoida kun ainoa ohjelmointikisa johon olen osallistunut on tämänvuotinen taitajakisa, jossa testattiin PHP-taitoja, mutta idioottihan sellainen on joka ei pyri optimaaliseen ratkaisuun kielestä riippumatta.
Eihän optimaalinen ratkaisu aina ole se, joka on nopein ja vie vähiten muistia. Ohjelmointiin kulutettu aikakin on koodin optimaalisuuteen vaikuttava tekijä: mitä hyötyä on puolivalmiista tekeleestä, joka olisi käsittämättömän nopea? Toki ratkaisun pitää olla tarpeeksi nopea ja viedä tarpeeksi vähän muistia, että se on käyttökelpoinen.
Feuer wrote: Myönnän C++-leikkieni rajoittuvan windowsiin ja VC++aan, mutta javalla kirjaston käyttöön vaaditaan, öö, .jar:in tuonti IDEen ja oikeiden pakkausten importit. (V)C++lla, lataa kirjasto _ties mistä_ (Windows-spesifinen ongelma :)), säädä polut IDE:n syövereistä (ymmärtääkseni myös paremmin naapurimaailmassa), toivo että dokumentaatiota on ja että se on kartalla, includeta satunnainen kasa headereita, kesytä linkkeri (etenkin SMFL:n kanssa sai rehellisesti arvailla että mitä pitäisi linkata mukaan), ja käytä. Jotenkin tykkään tuosta ensimmäisestä tavasta enemmän, etenkin kun java-kirjastoilla on tapana heittää vähemmän kryptisiä "Unhandled exception" - poikkeuksia täysin käsittämättömissä paikoissa :)
Jaa, ei kai SFML:n kanssa tarvitse arvailla niitä tiedostoja. Muistaakseni aina linkataan core, ja jos tarvitset grafiikkaa, linkkaat grafiikka-filun, jos verkko-ominaisuuksia linkkaat network-filun jne. Debug versioon se missä on d ja release versioon se toinen. Muistaakseni.

Javalla toki tuo säätäminen jää vähemmälle, mutta kyllä se C++:ssa helpottuu huomattavasti jos käyttää ennestään tuttuja kirjastoja jne.
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Java.

Post by Feuer »

Optimaalisella tosiaan tarkoitin olosuhteet huomioon ottaen vaatimukset parhaiten täyttävää ratkaisua. Hyvien ratkaisujen määritelmä on melko elävä.

En muista tuon SFML-seikkailun yksityiskohtia, mutta muistaakseni ensimmäiset linkkeriasetukseni eivät toimineet. Tai sitten sekoitan tapauksen siihen ei missään löytämässäni lähteessä dokumentoituun kääntäjävakioon, joka määritteli linkataanko dynaamisesti vai staattisesti, ja jonka puute aiheutti VS:n output-akkunaan kymmenien rivien errorviestin, josta sai irti niin paljon että linkkausprosessissa oli _jokin_ ongelma.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Java.

Post by esa94 »

Dibalo wrote:Teille, jotka ette halua opetella ohjelmoimaan [Javaa Javan tavalla], vaan pitäydytte itsepintaisesti C++:n konventioissa ja design patterneissa, koska teidän mielestänne C++ on maailman paras:

Onnea työelämään
Yritätkö väittää että joku muka saisi töitäkin ohjelmointialalta~
EDIT:

Enkä mä ainakaan pitäydy missään design patterneissa kun en oo niitä koskaan opetellut, oon sillä tavalla paska ihminen :3

User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Java.

Post by Sami The Great »

esa94 wrote:
Dibalo wrote:Teille, jotka ette halua opetella ohjelmoimaan [Javaa Javan tavalla], vaan pitäydytte itsepintaisesti C++:n konventioissa ja design patterneissa, koska teidän mielestänne C++ on maailman paras:

Onnea työelämään
Yritätkö väittää että joku muka saisi töitäkin ohjelmointialalta~
EDIT:

Enkä mä ainakaan pitäydy missään design patterneissa kun en oo niitä koskaan opetellut, oon sillä tavalla paska ihminen :3

Ei ehkä suoranaisesti ohjelmointialalta, mutta kyllä noitä IT-keskeisiä työpaikkoja nykyään on erittäinkin paljon. Esim. vaikka iltalehden sivuilta alhaalta, jossa on koottu viikon uudet typaikka ilmoitukset:
» Palveluneuvoja, S-Asiakaspalvelu, Barona
» Järjestelmäkehittäjä, Vantaan Energia
» Online Service Manager, Oy Karl Fazer Ab
» 18 uutta pelialan ammattilaista, GamePro
» Google kasvattaa 20 uutta online-mai.., AdWords Academy..
» Uracoach valmentamaan IT-osaajia, Barona
» IT-osaaja rekrytoinnin asiantuntijaksi, Barona
» Rekrytointikonsultti IT-alalle (Oulu), Barona
» Uusia C#.NET-ammattilaisia, Useita eri yrityksiä
» 10 automaatiotestauksen asiantuntijaa, Endero
» 10 kokenutta ohjelmistokehittäjää, Endero
» Progress-järjestelmäkehittäjä, KWH Freeze
» Salesforce-järjestelmäpäällikkö, Fonecta
» Kehityspäällikkö IT-sisältötiimiin, Fonecta
» Delphi-ohjelmistosuunnittelija, FuturSoft
» 4 lähituen ammattilaista, Istekki
» Kesätyöntekijöitä, Lahti Energia
» Sähkö- ja automaatioinsinööri, Lahti Energia
» Asennuspäällikkö, Skaala Ikkunat ja Ovet
» Kehity JavaEE-ammattilaiseksi, Useita työnantajia
Näyttäisi ainakin ihan hyvin olevan tällä hetkellä ainakin haussa.

Tuli tuosta javasta mieleen, että kun olen tehnyt peliä Androidille ja sama peli kääntyy Java-sovellukseksi winukalle, niin mahtaakohan nuo windows sovellukset toimia ilman mitään lisäsäätöjä windows-puhelimissa? Ja onkos kenelläkään minkäänlaista kokemusta iOS:tä tai nokian vanhemmista käyttiksistä, että miten helposti javaohjelmia saa niille käännettyä? Esim. toimiiko OpenGL 1.1 jne?
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Java.

Post by Sami The Great »

Äääh.. olen tänää yrittänyt ratkoa hyvin mystistä java ongelmaa. Mikä IHME tässä voi olla vikana:

Code: Select all

shieldTimer = shieldTimer-delta;
		if(shieldTimer <= 0.0f)
		{
			shieldTimer = 0.0f;
			float shieldRecover = 0.0f;
			if(this.shieldLevel == 1) shieldRecover = 6.5f;
				
			this.shield = this.shield + (shieldRecover*delta);
		}
		this.showShield = false;
		if(shield > 0) this.showShield = true;
		
		if(durability > 100.0f) durability = 100.0f;
		if(shield > 100.0f) shield = 100.0f;
shieldTimeristä vähennetään joka framella deltaTime eli sekunnissa pitäisi pudota 1.0f. Jos kilpi tuhoutuu, niin asetetaan shieldTimer arvoksi 5.0, joten kilpi alkaa taas latautumaan 5 sec kuluttua. Jos shieldTimer <= 0.0f niin ladataan kilpeä. Pidetään shieldTimer aina vähintään nollassa, ettei luku pääse miinukselle ja näin ollen pitkän ajan kuluttua pyörähdä ympäri. Lisätään pelaajan shield(kilven kesto muuttuja) arvoon lisää latausta. Tähän asti kaikki pitäisi olla selvää. Tullaan viimeiselle riville, jossa estetään kilven latauksen nouseminen yli 100%. Nythän kilven arvon pitäisi olla 100. Myöhemmin renderöin tekstin, joka kertoo pelaajalle kilven latauksen määrän. Jostain ihmeen syystä tämä teksti vaihtelee. Pienin aikavälein ruutuun pamahtaa 101.. ja saman tien muuttuu takaisin arvoon 100. Arvoon ei saman loopin aikana kosketa tämän jälkeen kertaakaan, joten miten ihmeessä voi olla mahdollista, että arvo onkin välillä 101, kun tuolla rivillähän se täysin 100% logiikalla ei ole mahdollista? Tämä pelaajan päivittäminen tapahtuu Player-luokan omassa metodissa ja itse pääluokassa pyörii yksi player-olio, jolle metodia kutsutaan. Renderöinti kuitenkin tehdään pääluokan metodissa, joten onko javassa jotenkin mahdollista, että kun nämä metodit ovat eri luokissa, että niitä suoritetaan samaan aikaan, joten arvot eivät välttämättä täsmää? Jos on niin, miten sen voisi estää? Tietääkseni kuitenkin Thread pitää erikseen määritellä luokkaan ennen, kuin uusi säije luodaan.

EDIT: Myös välillä pelaaja ampuu tupla-ammuksen, kun sitä testaa androidilla, jossa on mahdollisuus moneen syötepisteeseen. Olen blokannut tupla inputin samaan nappiin kahdella eri sormella, mutta pelaaja ampuu silti tupla-ammuksen, joten johtunee varmaan timereista, jotka nekin sijaitsee Player-luokassa. Eli jotenkin nyt nuo Player-luokan arvot ei päivity ennen kuin pääluokassa aletaan ammuskelemaan ja piirtämään grafiikkaa...
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Java.

Post by valscion »

Minä veikkaisin että ongelma voi olla liukulukujen epätarkkuudessa. En osaa sanoa Player-luokan toiminnallisuudesta mitään kun noin vähän koodia on näkyvissä, joten minua kiinnostaisi tietää millä tavalla renderöit kilven latauksen määrän ruudulle?

Eikös tupla-ampumisen saisi paremmin estettyä niin että tarkistaa timerilla että edellisestä ammuksesta on kulunut tarpeeksi aikaa ennen kuin uusi luodaan?

Hankala koittaa auttaa tätä enempää, pääloopin näkeminen voisi auttaa. Ymmärtääkseni Javassa ei suoriteta eri luokan metodeja samaan aikaan ellei säikeistystä ole erikseen koodattu. Itse en ole ainakaan moiseen toiminnallisuuteen törmännyt omien Java-kikkailujeni kanssa.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Java.

Post by Sami The Great »

VesQ wrote: Eikös tupla-ampumisen saisi paremmin estettyä niin että tarkistaa timerilla että edellisestä ammuksesta on kulunut tarpeeksi aikaa ennen kuin uusi luodaan?
Asia tehdään nyt niin, mutta ongelma ratkesikin jo, vaikka en vielä ole keksinyt selitystä asialle. Deltatime sai välillä negatiivisia arvoja, joten timerit hyppäsivät vastakkaiseen suuntaan. Estin sen tarkastamalla, ettei delta voi olla alle 0, mutta en ole vielä syytä siihen keksinyt miten se on välillä alle 0.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Java.

Post by valscion »

Sami The Great wrote:
VesQ wrote: Eikös tupla-ampumisen saisi paremmin estettyä niin että tarkistaa timerilla että edellisestä ammuksesta on kulunut tarpeeksi aikaa ennen kuin uusi luodaan?
Asia tehdään nyt niin, mutta ongelma ratkesikin jo, vaikka en vielä ole keksinyt selitystä asialle. Deltatime sai välillä negatiivisia arvoja, joten timerit hyppäsivät vastakkaiseen suuntaan. Estin sen tarkastamalla, ettei delta voi olla alle 0, mutta en ole vielä syytä siihen keksinyt miten se on välillä alle 0.
Okei, hyvä että asia ratkesi. Miten deltatime lasketaan koodissasi?
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Java.

Post by Sami The Great »

Code: Select all

this.deltaTime = (float)(System.nanoTime()-startTime)/1000000000.0f;
this.startTime = System.nanoTime();
if(this.deltaTime >= 0.1f) this.deltaTime = 0.1f;
if(this.deltaTime < 0.0f) this.deltaTime = Math.abs(this.deltaTime);
Ilmeisesti startTime on joskus suurempi kuin System.nanoTime(), jolloin vastaus on negatiivinen tai sitten luvut jotenkin pääsee pyörähtämään ympäri kun luvun maximi arvo tulee vastaan. Ongelma esiintyy varsinki sillon, kun tietokone on ollut kauan päällä, joka voisi kohdistaa vian tuohon systeemin nanotimeen. Huomasin myös, että kun deltatime muuttuu negatiiviseksi, niin sen itseisarvo kuitenkin on oikea, joten pelin lagittamisen sain pois muuntamalla vain sen takaisin positiiviseksi. (Aiemmin kun se muutettiin nollaksi, peli loogisesti pysähtyy hetkeksi, koska nollalla mikään ei liiku).
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Java.

Post by valscion »

Sami The Great wrote:

Code: Select all

this.deltaTime = (float)(System.nanoTime()-startTime)/1000000000.0f;
this.startTime = System.nanoTime();
if(this.deltaTime >= 0.1f) this.deltaTime = 0.1f;
if(this.deltaTime < 0.0f) this.deltaTime = Math.abs(this.deltaTime);
Ilmeisesti startTime on joskus suurempi kuin System.nanoTime(), jolloin vastaus on negatiivinen tai sitten luvut jotenkin pääsee pyörähtämään ympäri kun luvun maximi arvo tulee vastaan. Ongelma esiintyy varsinki sillon, kun tietokone on ollut kauan päällä, joka voisi kohdistaa vian tuohon systeemin nanotimeen. Huomasin myös, että kun deltatime muuttuu negatiiviseksi, niin sen itseisarvo kuitenkin on oikea, joten pelin lagittamisen sain pois muuntamalla vain sen takaisin positiiviseksi. (Aiemmin kun se muutettiin nollaksi, peli loogisesti pysähtyy hetkeksi, koska nollalla mikään ei liiku).
Aika jännän näköinen tuo jakolasku ekalla rivillä. Oletko määritellyt startTime nimisen muuttujan vai pitäisikö sinun käyttää tuossa jakolaskussakin this.startTime kenttää? Ja oletko varma että tuo floattiin castaaminen tapahtuu oikeassa kohtaa? Eikö kannattaisi heittää yhdet sulut lisää varmistaaksesi että tuo menee nyt oikein? Mitä arvoa yrität castata floatiksi tuolla ekalla rivillä?

EDIT: Niin ja jos olet määritellyt startTime muuttujan aikaisemmin, kai sen tyyppi on long?
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: Java.

Post by Sami The Great »

startTime on määritelty aikaisemmin. Muuttujaa pitäisi pystyä käyttämään ilman this. viittausta, mutta lisäsin sen nyt kun näköjään oli unohtunut. StartTime on long tyyppinen. Tosiaan floatiksi pitäisi muuttaa tuo nanoTime()-startTime, jotta voidaan jakaa se niin, että saadaan sekunteja. No ainakin nyt peli toimii ilman virheitä kun lisäsin nuo rajoitteet deltatimen arvolle, joten pääsen taas jatkamaan projektia. Jäi vaan ihmetyttämään mistä moinen voi johtua?
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Java.

Post by valscion »

Jotenkin voisin kuvitella että longista kannattaisi castata doubleen floatin sijaan. Mutta hyvä että ei enää bugita :)
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: Java.

Post by Feuer »

Mikä olisi ratkaisu erääseen windowsjavan ikuisuusongelmaan? Oikeinkonffatussa ympäristössä Netbeansin tuottamien .jar - tiedostojen pitäisi käynnistyä ihan kiltisti tuplaklikkaamalla, aivan kuten .exet käyttäytyvät. Kuitenkin, ainoa mitä tapahtuu tällaisia .jareja tuplaklikkaamalla on tämä. Virheilmoituksen itkemä luokka on olemassa sekä projektissa että .jarissa.
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
skorpioni-cb
Advanced Member
Posts: 364
Joined: Wed Dec 03, 2008 3:48 pm
Location: Turku

Re: Java.

Post by skorpioni-cb »

Feuer wrote:Mikä olisi ratkaisu erääseen windowsjavan ikuisuusongelmaan? Oikeinkonffatussa ympäristössä Netbeansin tuottamien .jar - tiedostojen pitäisi käynnistyä ihan kiltisti tuplaklikkaamalla, aivan kuten .exet käyttäytyvät. Kuitenkin, ainoa mitä tapahtuu tällaisia .jareja tuplaklikkaamalla on tämä. Virheilmoituksen itkemä luokka on olemassa sekä projektissa että .jarissa.
Sinun pitää laittaa manifest-filuun rivi

Code: Select all

Class-Path: käynnistysluokkasi nimi
ja perään rivinvaihto
En tiedä, mitä tiedän, mutta tiedän ettei se ole mitään kaunista.

I know not what I know, but I do know that it's not beautiful.
Post Reply