Olen kyhäillyt jo hetken aikaa tällaista tilepohjaista pelimoottoria Javalla. Kun aloitin projektin en tiennyt käytännössä mitään pelien teosta, tiedostosta lukemisesta tai säikeistä. Näistä syistä tämä projekti on opettanut erittäin paljon ja olen myös joutunut välillä kyselemään apua. Tästä johtuen koodi on mössöä ja sen jaottelu luokkiin ontuu. :)
Itse asiaan:
Nyt kun olen saanut pehmeän skrollauksen toimimaan(huonosti), se osoittautui liian hitaaksi. Kun on tarkoitus liikkua oikealle kartta liikkuu ukon ympärillä yhden tilen vasemmalle. Tässä käy kuitenkin niin, että tilejen välit rakoilevat ja välillä ruutu välkkyy(kaksoispuskuroinn avustamanakin). Kuvien lataussysteemi on vaihtumassa isosta kuvasta(,joka sisältää kaikki tilet) kartalle piirrettäväksi ja siten pääsen eroon julmetusta määrästä kuvia. Applettia voi testata täällä, mutta kuvien lataamisen hitauden vuoksi, suosittelen paketin lataamista omalle koneelle täältä. Lähdekoodia voi tarkastella täältä.
Ihmettelenkin siis, miksi kuvien väliin jää valkoisia raitoja(etenkin kun liikutaan vasemmalle tai ylös).
Enginessä on muitakin pieniä ongelmia, kuten ukon suistuminen raiteilta ja ovista sisään meno(, joka toimi hyvin, kun siirryttiin vain yksi tile kerrallaan(kuin myös raiteilla pysyminen)), mutta näillä en viitsi teitä vaivata ellei vika ole ilmeinen.
Kiitoksia jos vaivaudutte tuota ihmettelemään, niin saa jostain tekemistä Assyilee.
PS. Ja tietenkään en tilejä ole piirrellyt itse.
Heti ekana pisti silmään tuo että paint metodissa lataat puska.png:n ja puskaAni.gif:in joka kerta uudelleen. samoin teet nuiden tilejen kanssa.
Jos tilejä ei ole aivan älytön määrä niin itse lataisin ne jo alussa taulukkoon, jolloin niitä ei joka kerta tarvitsisi ladata erikseen.
Olen tällä hetkellä töissä mutta voin katsoa iljemmalla tarkemmin tuota peliäsi (Itse peliäkään en voi työkoneella katsoa)
Juu, tuohan on hyvä idea. Varmasti yksi suurimmista syistä pelin hitautueen.
Mikä nyt ekana osui silmään init() metodissa käynnistät kaksi threadia:
mainLoop=new Thread(this); if(mainLoop!=null)mainLoop.start(); new Thread(this).start(); //siirrytään säikeeseen ja aloitetaan mainLoop
Mihinköhän mahdat käyttää metodia "setvijä(int i)"?
edit. Siis pelkästä mielenkiinnosta, en usko että se vaikuttaa hidastumiseen.
Tuo setvijä(int i) on muinaisjäännöksiä jostain muka koodia selventävästä yritelmästä(nyt tarpeeton).
Nyt kun init()-metodi aloittaa vain yhden säikeen peli nopeutui huimasti. Kuvataulukko on vielä kehitysvaiheessa. Kiitoksia kaikille auttaneille.
Jos vielä hidasteita tai vinkkejä löydätte, otan niitä toki vastaan.
Tuosta kuvataulukosta vielä...
Tein nopeasti pikkuohjelman, jonka pitäisi piirtää viisi tileä vierekkäin demonstroiden tuota kuvataulukkoa. Koodissa näyttäisi kuitenkin olevan jotain vikaa.
import java.awt.*; import java.applet.*; public class KuvaTaulukko extends Applet{ Image jono[]; Image kuva; int x; public void init(){ kuvatTaulukkoon(); repaint(); } public void kuvatTaulukkoon(){ for(int i=0; i<5; i++){ jono[i]=getImage(getCodeBase(), "tile"+i+".png"); } } public void paint(Graphics pixeli){ for(x = 0; x < 5; x++){ pixeli.drawImage(jono[x], x*32, 50, 32, 32, this); } } }
En kerennyt tuota edellistä viestiä muokkaamaan, joten kirjoitin uuden.
No et kerro missään vaiheessa tuota Image taulukon kokoa. Eli tuolla init:issä olisi hyvä olla:
jono = new Image[5];
Juuri huomasin tuon itsekin. ^^
Kiitokset kuitenkin vastauksesta!
Nyt peli toimii huomattavasti nopeammin kuin ennen, mutta pientä välkkymistä taphatuu vieläkin. Mistähän moinen?
Appletti:
http://www.kaakeliuuni.arkku.net/Java/Tile-engine/Peli1.html
Lähdekoodi:
http://www.kaakeliuuni.arkku.net/Java/Tile-engine/Peli.java
Hello!
Appletti ei käynnisty mun koneessani, vain harmaa laatikko,
tosin yläreunassa räpsähtää jokin textArea ??
Mullakin tulee harmaa laatikko, jossa "Applet loaded", eikä sitten muuta. JDK 1.6.0.02/Linux/Opera
Kokeilkaapa ladata tuorein zip-paketti tuosta http://www.kaakeliuuni.arkku.net/Java/Tile-engine/TileEngine 3.8.07.zip. Siinä on mukna lähdekoodikin, joten jos Windowsini tuottama käännös ei jostain syystä toimi Linuxissa, niin voitte halutessanne kääntää sen omalla koneella. Kaikki tarvittavat tiedostot sisältyvät pakettiin. Tuota applettia saa muutenkin ladata melko pitkään netin yli(näkyy pitkään vain valkoisena).
Olen myös ihmetellyt bugia, joka esiintyy kun mennään taloon tai sieltä ulos. Tällöin peli saattaa jäätyä tai kenttä ei lataudu ollenkaan. Kääntäjä valittaa tällöin java.lang.ArrayIndexOutOfBoundsException: -1 ja sanoo sen olevan kartan jonkun layerin(vaihtelee) sisältävässä taulukossa. Tämä bugi ei ilmene aina, mutta useammin ulos mentäessä oikeanpuoleisesta ovesta.
Enää ei kuitenkaan eksytä ruudukosta. Syynä tuohon oli yhden vakion liian pieni arvo :D
Hello!
Tuoreimmalla paketilla räpsähti kuvaruudulle kaunis grafiikkainen peli area,
mutta, en saanut ukkelia liikkumaan näppäimistöltäni..
tosi hyvät grafiikat kuiteskin, mitenkä pääsen liikkumaan peli alueelle ??
Pelissä pitäisi pystyä liikkumaan nuolinäppäimillä ja jos ctrl on pohjassa niin ukko vain kääntyy katsomaan painettuun suuntaan. Varmista, että appletti saa fokuksen klikkaamalla sitä. Ja tosiaan en grafiikkoja itse ole tehnyt vaan vetänyt netistä. Näppäimistön kanssa on kyllä ollut onglemia ennenkin(Vista ei suostunut niitä tottelemaan), mutta ei sen jälkeen kun aloin käyttämään HashSet-jonoa näppäinten painalluksessa.
Joku aika sitten koodasin tuohon karttaeditorinkin. Tähän olen nuo käyttöliittymän grafiikat tehnyt itse(ja ihan mukavathan niistäkin tuli).
http://www.kaakeliuuni.arkku.net/Java/MapEditor/
Tarkoituksena olisi joskus saada tästä nettiversio ulos. Pelimekaniikkahan on kuitenkin täysin kesken. Jonkinlainen taistelusysteemikin tähän olisi vielä tulossa. Serveri toisaalta on jo ihan hyvällä mallilla.
MUOKS.
Vielä pieni ohje tuohon editoriin jos joku sitä innostuu tosissaan kokeilemaan.
Radionapeilla voi valita työstettävän layerin ja sitten dropdown-valikosta tilen. Hiiren vasemmalla laitetaan tile ja oikealla voi pyyhkiä. 5-layeri on törmäystarkistusta varten - punainen tarkoittaa seinää ja sininen vettä(vedellä ei tässä vaiheessa vielä ole merkitystä). 5-layerin ja apuviivat voi piilottaa checkboxista. Alareunan napeilla karttaa voi liikutella. Clear-namiska pyyhkii työstettävän layerin kokonaan. Save-nappi avaa työstettävän layerin koodin kopioitavaksi ja Open-nappi avaa viereisen textBoxin mukaisen kartan(vielä ei ole kuin kaksi karttaa, mutta niitä otetaan kyllä mielellään vastaan jos jaksatte vääntää^^). Kartan koon voi päättää width ja height textBoxeista ja mitat otetaan käyttöön Set-napista. Layereiden pitää olla tyhjiä, jotta kokoa voidaan muuttaa.
Hello!
mun operassa ohjelma ei toiminut,
local run with firefox runnasi kymmenkunta sekunttia ja hyytyi sitten,
ohjelma taitaa viedä aika paljon muistia..
Joo se voi viedä kyllä muistia, sillä se lataa kaikki kuvat eri tiedostoista ja muutenkaan ei välttämättä ole optimaalisin.
Windows kertoi sen vievän 22 000 kt muistia, mikä ei kyllä aivan mahdoton määrä ole. Toisaalta suorittimen käyttö hyppäsi kattoon heti kun käynnistin appletwieverin. Kuitenkin tuo läppärillä on ihan kivasti toiminut, enkä oikein keksi miten tuota saisi kevyemmäksi. Ehdotuksia?
Mobel kirjoitti:
Windows kertoi sen vievän 22 000 kt muistia, mikä ei kyllä aivan mahdoton määrä ole. Toisaalta suorittimen käyttö hyppäsi kattoon heti kun käynnistin appletwieverin. Kuitenkin tuo läppärillä on ihan kivasti toiminut, enkä oikein keksi miten tuota saisi kevyemmäksi. Ehdotuksia?
Tuohon muistimäärään sisältyy myös itse JVM joka taitaa haukata määrästä suurimman osan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.