Terve!
Java harrastaja kyseessä.
Itse ohjelmointi on jo hyvässä mallissa, mutta,
sovelletut perus tutoriaalit eivät oikein toimi,
kokoonpanona on Ubuntu ja siinä Sun JDK 1.6.06,
selaimina Firefox ja Opera.
esim seuraava koodi,
ei uudelleen lataudu Firefoxin Applettiin Linuxissa.
Windowssissa Firefox toimii mutta Opera ei, IEtä en ole testannut.
... extend Applet implements Runnable init () { gamerun = true; lataagrafiikat (); canvas = new canvas () canvas = new bufferstategy ( 2 ) } start () { if thread==null thread = new thread ( this ) thread.start() } stop () { if thread!=null thread.stop() } run () { while ( gamerun == true ) { grafiikan piirrot () bstrategy.show() } } destroy () { super.destroy () }
mikä koodi tavassa on väärin.
-------------------------
toinen kysymys on,
kun minä käytän normaalia Applet tapaa
init()
start()
run()
paint()
update()
stop()
destroy()
ilman bufferstategya ja ilman canvasta niin applettini toimii aina oikein.
kuitenkin ongelman on että paint ei päivitä ruutua samantien,
välillä on noin puolen sekunnin nykäys päivityksessä ja animaatio ruudussa.
kuinka tämä paint() käsky flushssattiin onnistuneesti ??
eli kuinka annetaan Appletissa käsky että ruutu pitää päivittää välittömästi,
eikä vasta hetken kuluttua.
//----
kiitos,,
kpzpt kirjoitti:
mikä koodi tavassa on väärin.
Ainakaan tuo koodi ei ole Javaa. Copy-pastea tänne sellainen versio koodistasi, jolla kyseinen ilmenee ja jota toiset pystyvät itse suorittamaan, niin joku voi pystyä auttamaankin.
kpzpt kirjoitti:
välillä on noin puolen sekunnin nykäys päivityksessä ja animaatio ruudussa.
kuinka tämä paint() käsky flushssattiin onnistuneesti ??
eli kuinka annetaan Appletissa käsky että ruutu pitää päivittää välittömästi,
eikä vasta hetken kuluttua.
Jos nuo ovat samassa luokassa, eikö muka riitä
paint();
?
Jackal von ÖRF kirjoitti:
kpzpt kirjoitti:
mikä koodi tavassa on väärin.
Ainakaan tuo koodi ei ole Javaa. Copy-pastea tänne sellainen versio koodistasi, jolla kyseinen ilmenee ja jota toiset pystyvät itse suorittamaan, niin joku voi pystyä auttamaankin.
Jeh!
tämmöinen ei toimi enää uudelleen ladattaessa,
selain on Firefox3 Ubuntussa.
minä olen jo alkanut epäillä että Ubuntun Firefoxissa on bugeja ??
yleensä nämä esimerkit mitä olen netistä löytänyt eivät toimi uudelleen ladattaessa.
tässä siis esimerkki code
package javaapplet; import java.awt.*; import java.applet.*; import java.util.Date; public class NewApplet extends Applet implements Runnable { Thread clockThread; TextField clockField; Date date; boolean running = true; public void init() { setLayout(new BorderLayout()); clockField = new TextField(); add(clockField,"Center"); clockThread= new Thread(this); clockThread.start(); } public void destroy() { running = false; clockThread = null; } public void run() { while (running) { date = new Date(); String time = date.getHours()+":"+date.getMinutes()+":"+date.getSeconds(); clockField.setText(time); try { clockThread.sleep(500); } catch (InterruptedException e) { System.out.println(e); } } } }
tämä siis ei toimi joka selaimessa ja tarvitsen sellaisen koodin
joka toimisi,
esim. Aapelin biljardi on sellainen joka toimii minulla joka selaimessa.
mikähän Applet rakenne siinä on ??
//----
kiitos,,
Ensimmäisessä viestissä puhuit ongelmista silloin, kun käytät BufferStategyä tai Canvasia, mutta eihän tuossa äskeisessä koodissa ole kumpaakaan?
Öö!
No joo, mutta kun ei tämä yksinkertaisempikaan suostu toimimaan.
askel kerrallaansa.
minulla on Ubuntu 8.04.1 ja siinä siis Firefox ja Opera.
operassa tuo esimerkki uudelleen latautuu ja käynnistyy kun painaa
selaimen reload buttonia.
firefox ei enää uudelleen lataa ohjelman pätkää vaan jämähtää.
minulla on siis vain nämä kaksi selainta käytössä, en kovin laajaa
kuvaa pysty kotona rakentamaan.
mitenkä tuo esimerkki, uudelleen latautuukos tuo teidän selaimiinne.
se löytyy käännettynä seuraavasta.
kunhan tietokoneeni on avoinna.
http://84.249.5.241/JavaApplet/dist/PeliSuomi.
//----
kiitos,,
kpzpt kirjoitti:
tämä siis ei toimi joka selaimessa ja tarvitsen sellaisen koodin
joka toimisi, esim. Aapelin biljardi on sellainen joka toimii minulla joka selaimessa. mikähän Applet rakenne siinä on ??
Imuroi Aapelin käyttämä(t) jar:t ja decompiloi (http://www.kpdus.com/jad.html) ne takaisin java lähdekoodiksi. Siitähän sen näkee minkälaiset rakenteet niissä on.
_Pete_ kirjoitti:
kpzpt kirjoitti:
tämä siis ei toimi joka selaimessa ja tarvitsen sellaisen koodin
joka toimisi, esim. Aapelin biljardi on sellainen joka toimii minulla joka selaimessa. mikähän Applet rakenne siinä on ??Imuroi Aapelin käyttämä(t) jar:t ja decompiloi (http://www.kpdus.com/jad.html) ne takaisin java lähdekoodiksi. Siitähän sen näkee minkälaiset rakenteet niissä on.
Ai et Java ohjelmat saa tosta vaan käännettyy takas lähdekoodiks? :d
Matso kirjoitti:
_Pete_ kirjoitti:
Imuroi Aapelin käyttämä(t) jar:t ja decompiloi (http://www.kpdus.com/jad.html) ne takaisin java lähdekoodiksi. Siitähän sen näkee minkälaiset rakenteet niissä on.
Ai et Java ohjelmat saa tosta vaan käännettyy takas lähdekoodiks? :d
Aivan oikein. Ellei ole erikseen käytetty jotain "sekoitussysteemiä" ne näyttävät
jad:n jäljiltä yllättävän samannäköisiltä verrattuna alkuperäiseen lähdekoodiin.
ville-v kirjoitti:
kpzpt kirjoitti:
välillä on noin puolen sekunnin nykäys päivityksessä ja animaatio ruudussa.
kuinka tämä paint() käsky flushssattiin onnistuneesti ??
eli kuinka annetaan Appletissa käsky että ruutu pitää päivittää välittömästi,
eikä vasta hetken kuluttua.Jos nuo ovat samassa luokassa, eikö muka riitä
paint();?
Uudelleenpiirtoon kannattaa käyttää tietääkseni repaint();
Hell!
Ei onnistu ei sitten millään.
Firefox ei suostu käynnistämään Applettejani uudelleen ladattaessa.
minä en osaa korjata ongelmaani.
jos teillä jollakin on Ubuntun Firefox3 selaimessa toimivan Appletin runko.
niin laittakaa ihmeessä sorsat jotta pääsen eteenpäin projekteissani.
tämä ongelma on myös osassa Aapelin peleistä.
shakki ei lataudu uudestaan mutta biljardi taas latautuu.
Operassa kaikki Appletit latautuvat.
mistä voi olla kyse. onko Firefox buginen,
//----
kiitos,,
Jeh!
Laitan tähän linkin.
mitä jos auttaisitte sen verran että saan kattavamman kuvan konepaketeista joissa tämä Applet uudelleen latautuu ja uudelleen käynnistyy.
http://pelisuomi.eu/PeliSuomi.html
eli, tuon reloadaaminen.
pystyn itse testaamaan vain seuraavissa.
Linux Ubuntu 8.04.1
Opera - Toimii täysin joka latauskerralla.
Firefox3 - Toimii ensimmäisellä latauskerralla, mutta ei Reload buttonin jälkeen.
Windows XP
Opera - Ei lataudu eikä käynnisty.
FireFox3 - Toimii täysin joka lataus ja käynnistys kerralla.
IE - Toimii täysin joka lataus ja käynnistys kerralla.
kiinnostaisi Mac, Vista ja muut Linux julkaisut, mutta myös se kattavampi
kuva XP ja Ubuntu koneista olisi mukava.
//----
kiitos,,
WinXP, JRE 1.6.0_07, Core 2 Quad Q6600
Opera 9.52 - Näkyy, reload ok
Firefox 3.0.1 - Näkyy, reload ok
Molemmilla tuo appletti kuitenkin päivittää ruutua todella hitaasti ja kuluttaa muutaman sekuntin välein 100% CPU:ta (yksi säie), noin sekuntin verran kerrallaan. Vaikuttaa että appletin piirtorutiineissa on jotain pielessä.
Jeh!
hienoa että latautui ja käynnistyi.
pitäisi vielä Vista ja muut kuin Ubuntu Linuxit testata.
Tuo minun vektori fileen purkuni on vasta 10% valmis.
minulla ei ole vielä yhtään valmista piirto funktiota nappi vektoreille.
käytännössä tuo Applet purkaa noita pakattuja/konventoituja .svg fileitä
ennen jokaisen yksittäisen napin/lautaneliön piirtoa,
eli purkaa siis koko .svg fileen ennen jokaista napin ja lautaneliön piirtoa,
tämä on tosi hidasta.
teen lähiviikkoina nuo vektori funktiot joilla sitten piirrän napit ja lauta neliöt, niin, mennään sitten munkin Athlon 1.733Gz kanssa yli 70fps.
nyt siis 0.3fps.
lisää testi tuloksia ??
Vista ja muut kuin Ubuntu Linuxit ja Mac !!
lisänä tää Linux Firefox ongelma pitää saada vielä vahvistettua.
minun Ubuntussa Firefox3 selaimella, applet ei uudelleen käynnisty selaimen reload buttonin jälkeen ??
//----
kiitos,,
kpzpt kirjoitti:
http://pelisuomi.eu/PeliSuomi.html
eli, tuon reloadaaminen.
Käyttis: Gentoo Linux (32-bit)
JRE: Sun JDK 1.6.0_07-b06
Opera 9.52: näkyy OK, reload OK
Firefox 3.0.1: näkyy OK, reload ei
Konqueror 3.5.9: näkyy OK, reload OK
Jeh!
Tuo Linux Firefox 3.x.x tuntuu olevan sitten buginen.
Jatkankin projektejani ilman että muutan koodaus tapaani,
jään vain odottamaan Firefox päivitystä.
jos Applet toimii näin kattavasti muissa kuin Linux Firefox 3.x.x kokoonpanoissa,
niin, en usko että vika on koodissani.
hienoa että viitsitte testata Applettiani, pääsen nyt sitten eteenpäin projektissani.
//----
kiitos,,
kpzpt kirjoitti:
Jeh!
Tuo Linux Firefox 3.x.x tuntuu olevan sitten buginen.
Jatkankin projektejani ilman että muutan koodaus tapaani,
jään vain odottamaan Firefox päivitystä.jos Applet toimii näin kattavasti muissa kuin Linux Firefox 3.x.x kokoonpanoissa,
niin, en usko että vika on koodissani.hienoa että viitsitte testata Applettiani, pääsen nyt sitten eteenpäin projektissani.
Appletissasi on yli 400-rivinen piirtofunktio ( http://sooda.dy.fi/paste/?qJV ), jota kutsut pääluokan run()-funktiossa ( http://sooda.dy.fi/paste/?qXD ) 73 kertaa, riippumatta siitä onko piirrettävän alueen sisältö muuttunut tai ei.
Ehkäpä tässä olisi "pientä" optimoinnin tarvetta, kuten muuallakin koodissasi. Olet kumminkin tehnyt piirtofunktion parilla hassulla rivillä tajuamatta yhtään millaisiksi ne vääntyvät käännettäessä, ja käyttämällä suoraan matalamman tason funktioita tehoa olisi saanut kymmenkertaisesti. Mihin tarvitset esimerkiksi antialiasointia ja läpinäkyvyyttä yksinkertaisessa pelissä?
No johan!
kuten jo aikaisemmin sanoinkin, niin, minulla ei ole vielä yhtään piirto funktiota tehtynä,
tämä ohjelma oli lähinnä testi .jvf ( Jarin/Java Vektori File ) piirrolle.
kaikki shakki napit 18 kpl ( normaalit + tykistö + lohikäärme + henki.. ). vievät vain 9k muistia.
pystyn kutistamaan tämän vielä n 5k.
tohon 400 riviä 73 piirtoa.
ohjelmani vain piirtää kaikki napit ja laudan ja sitten odottaa 5sec ja piirtää taas saman alusta.
eli ihan ok ajattelu mukana.
mitä tarkoitat matalamman tason funktioilla.
tämä on oikeastaan ensimmäinen Java projektini ja siten todella iso minulle.
tarkoitus rakentaa (lauta)pelisivustot helsinkiin.
käyttäjiä 512 samanaikaisena.
mutta toiminta alkaisi sitten 2010 - 2012 ->
ohjelmoin Javalla näille peleilleni oman ohjelmointi kielen niin koodikin
on sitten hieman paremmin turvattuna.
----------------------
laita kuitenkin linkki tuohon sun .class kääntäjään.
se käänsi hienosti. mulla on cavaj käytössä se ei tee noin hyvää jälkeä.
----------------------
minulla on siis tarkoitus rakentaa todella monta hyvää lautapeliä nettiin.
tarvitsen itsestään selvyytenä antialiasta ja muitakin herkkuja.
----------------------
kiitos,,
kpzpt kirjoitti:
tämä ohjelma oli lähinnä testi .jvf ( Jarin/Java Vektori File ) piirrolle.
kaikki shakki napit 18 kpl ( normaalit + tykistö + lohikäärme + henki.. ). vievät vain 9k muistia.
pystyn kutistamaan tämän vielä n 5k.tohon 400 riviä 73 piirtoa.
ohjelmani vain piirtää kaikki napit ja laudan ja sitten odottaa 5sec ja piirtää taas saman alusta.
eli ihan ok ajattelu mukana.
Ajattelusi ei ihan toimi, kun koneeni piirtää kuvaasi hyvinkin 3-5 sekuntia ja aloittaessaan alusta tyhjentää ruudun uudestaan. Jos siirtäisit piirtämisen paint()-funktioon, sitä ymmärtääkseni kutsuttaisiin vain kun jotain muutosta on tapahtunut.
Funktiotasi voisi muokata niin, että se katsoisi mitä on siirretty, ja ainoastaan poistaa vanhan nappulan ja piirtää uuden. Piirtofunktiot taitavat kuitenkin olla melkoisia resurssisyöppöjä, joten 73 funktiokutsun pudottaminen kahteen auttaisi melkoisesti.
lainaus:
laita kuitenkin linkki tuohon sun .class kääntäjään.
se käänsi hienosti. mulla on cavaj käytössä se ei tee noin hyvää jälkeä.
http://finnish.toggle.com/lv/group/view/kl40040/
ville-v kirjoitti:
tohon 400 riviä 73 piirtoa.
ohjelmani vain piirtää kaikki napit ja laudan ja sitten odottaa 5sec ja piirtää taas saman alusta.
eli ihan ok ajattelu mukana.
[/lainaus]
Juu ja optimoimisen varaa tuossa pastebin public void drawSVG(Graphics2D AWT, String data); metodissa (javassa ei ole funktioita :) ) on ekana osu silmään:
- siinä parsitaan stringissä joka kutsukerralla vaikka mitä, pitääkö ne oikeasti
joka kerta parsia vai riittääkö että on parsittu kerran ja jos lähde muuttuu niin vasta sitten parsitaan uudestaan ts. se mitä piirrossa käytetään on mahdollisimman optimaalista binaaridataa eikä itään stringejä...
ville-v kirjoitti:
Jos siirtäisit piirtämisen paint()-funktioon, sitä ymmärtääkseni kutsuttaisiin vain kun jotain muutosta on tapahtunut.
en tunne AWTn toimintaa vielä.
mutta eikös tuo repaint () kutsu sitten update() kun näyttö on päivitys tarpeessa.
ei edes Javan kanssa grafiikka piirry itsekseensä ;)
ja mitä tulee tuohon minun koodin arvioimiseen, niin, en ole siis vielä tehnyt yhtään piirto funktiota jota sitten käytän projekteissani.
tämä oli vain nopea kokeilu tuohon minun .jvf fileen piirtäjääni, jonka
nyt satuin laittamaan esimerkkinä, kun firefox applet ei vieläkään uudelleen lataudu Ubuntussani.
ohjelmoin kyllä sitten erikseen funktiot .jvf piirtäjälleni,
niin että voin joko piirtää suoraan tuosta .jvf fileestä, kuten nyt,
taikka sitten piirto esi piirretystä Bufferedimagesta johon tuo .jvf on piirrettynä.
ja sitten vielä tallennen nuo .jvf koortinaatit ja pinnat ja nopeasti luen ne
piirtoa varten tallenteista.
//----
kiitos,,
Aihe on jo aika vanha, joten et voi enää vastata siihen.