LibGdx Oyun Kütüphanesi Texture Değiştirme
Merhaba,
Libgdx oyun kütüphanesini kullanarak ufak çaplı bir oyun yazmaya çalışıyorum. Bu kütüphanenin kendi tanıtımlarından Damla Yakalama Oyunu, 'A Simple Game' https://github.com/libgdx/libgdx/wiki/A-simple-game . Buradan yola çıkarak bazı değişiklikler yapmaya çalışıyorum.
Oyunun tüm kodları şu şekildedir.
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.TimeUtils;
import java.util.Iterator;
public class Baloncuk implements ApplicationListener {
//Değişkenler
private OrthographicCamera kamera; //kamera
private SpriteBatch tuval; //Görünmez Tuval.
private Texture rsmKova; //Kova resmi.
private Rectangle rctKova;//Resmin bağlı olduğu görünmez dikdörtgen.
private Texture rsmDamla; //Damla resmi.
private Array<Rectangle> damlalar;
private long sonDamlamaZamani;
private Sound sesDamla; //Damla sesi.
@Override
public void create() {
//Kamerayı tanımlıyoruz.
kamera = new OrthographicCamera();
kamera.setToOrtho(false, 800, 480);
//Resimler.
rsmKova = new Texture(Gdx.files.internal("rsmkova.png"));
rsmDamla = new Texture(Gdx.files.internal("rsmdamla.png"));
//Dikdörtgenler.
rctKova = new Rectangle();
rctKova.width = 64;
rctKova.height = 64;
rctKova.x = 800 / 2 - rctKova.width / 2;
rctKova.y = 20;
//Sesler.
sesDamla = Gdx.audio.newSound(Gdx.files.internal("sesdamla.mp3"));
damlalar = new Array<Rectangle>();
//Tuval
tuval = new SpriteBatch();
damlaUret();
}
private void damlaUret(){
Rectangle rctDamla = new Rectangle();
rctDamla.width = 45;
rctDamla.height = 68;
rctDamla.x = MathUtils.random(0 , 800 - 45);
rctDamla.y = 480;
damlalar.add(rctDamla);
sonDamlamaZamani = TimeUtils.nanoTime();
}
@Override
public void render() {
//Ekran arkaplanı boyar.
Gdx.gl.glClearColor(1.0f, 1.0f, 1.0f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
//Kamera Güncelleme
kamera.update();
//Tuval-Kamera ayarı
tuval.setProjectionMatrix(kamera.combined);
tuval.begin();
tuval.draw(rsmKova, rctKova.x, rctKova.y);
for(Rectangle rctDamla : damlalar){
tuval.draw(rsmDamla, rctDamla.x, rctDamla.y);
}
tuval.end();
//Kova dokunduğum yere gelsin
if (Gdx.input.isTouched()){
// (x, y, z) 3 boyutlu vektör.
Vector3 dokunmaPozisyonu = new Vector3();
//Vektöre dokunulan kordinatları veriyoruz.
dokunmaPozisyonu.set(Gdx.input.getX(), Gdx.input.getY(), 0);
//Kordinatları oyuna uyarlar.
kamera.unproject(dokunmaPozisyonu);
//Kovayı taşır.
rctKova.x = dokunmaPozisyonu.x - rctKova.width / 2;
rctKova.y = dokunmaPozisyonu.y - rctKova.height / 2;
}
if (TimeUtils.nanoTime() - sonDamlamaZamani > 1000000000){
damlaUret();
}
Iterator<Rectangle> damla = damlalar.iterator();
while (damla.hasNext()){
Rectangle rctDamla = damla.next();
rctDamla.y -= 200*Gdx.graphics.getDeltaTime();
if (rctDamla.y + 45 < 0){
damla.remove();
}
//Damla >> kovaya çarptığında ses çıkar.
if (rctDamla.overlaps(rctKova)){
sesDamla.play();
damla.remove();
}
}
}
@Override
public void dispose() {
rsmDamla.dispose();
rsmKova.dispose();
sesDamla.dispose();
tuval.dispose();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
Burada yapmak istediğim yukarıdan kayan damla texture'ının üzerine dokunduğumda bir başka texture'a (resime) dönüşmesini nasıl sağlayabilirim.
Bir diğer konu, damlaUret metodu ile sonsuz sayıda random damla texture'ı üretilmektedir. Bu damlaların sayısını sınırlandırabilir miyim? Örn: 20 adet damla gelmeli sadece ve benim belirlediğim koordinatlardan yine belirlemiş olduğum bir başka koordinata doğru ilerlemeli. Libgdx ile ilgili kaynaklar son derece sınırlı, bu yüzden konu açma gereği duydum. Yardımcı olabilirseniz sevinirim.