Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Tile-enginen hitaus

Sivun loppuun

Mobel [01.08.2007 14:10:37]

#

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.

maka78 [01.08.2007 15:31:56]

#

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)

Mobel [01.08.2007 16:21:37]

#

Juu, tuohan on hyvä idea. Varmasti yksi suurimmista syistä pelin hitautueen.

_Pete_ [02.08.2007 08:50:01]

#

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

Wukkopi [02.08.2007 11:21:32]

#

Mihinköhän mahdat käyttää metodia "setvijä(int i)"?

edit. Siis pelkästä mielenkiinnosta, en usko että se vaikuttaa hidastumiseen.

Mobel [02.08.2007 15:33:49]

#

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.

Mobel [02.08.2007 18:39:05]

#

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.

maka78 [02.08.2007 21:28:40]

#

No et kerro missään vaiheessa tuota Image taulukon kokoa. Eli tuolla init:issä olisi hyvä olla:

jono = new Image[5];

Mobel [02.08.2007 21:44:18]

#

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

kpzpt [03.08.2007 12:32:55]

#

Hello!

Appletti ei käynnisty mun koneessani, vain harmaa laatikko,
tosin yläreunassa räpsähtää jokin textArea ??

Blaze [03.08.2007 13:19:33]

#

Mullakin tulee harmaa laatikko, jossa "Applet loaded", eikä sitten muuta. JDK 1.6.0.02/Linux/Opera

Mobel [03.08.2007 14:56:37]

#

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

kpzpt [03.08.2007 15:06:13]

#

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 ??

Mobel [03.08.2007 15:41:22]

#

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/MapEditor.html

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.

kpzpt [03.08.2007 18:47:17]

#

Hello!

mun operassa ohjelma ei toiminut,
local run with firefox runnasi kymmenkunta sekunttia ja hyytyi sitten,
ohjelma taitaa viedä aika paljon muistia..

Mobel [03.08.2007 19:25:57]

#

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?

_Pete_ [09.08.2007 10:41:26]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta