2013-06-04 21 views
5

Ben libgdx forumlarda bu istedi ama bir yanıt alamadım beklendiği gibi döndürülmüş aktör çevrilmez. Yapmaya çalıştığım şey, oyuncunun ekranın etrafında hareket ettirmek için döşemeyi tıklayıp sürükleyebileceği ve placeTile komutunu göndermeden önce birden çok kez döndürebilmesidir. DragAndDrop'u anladığım kadarıyla benim kullanım durumum göz önünde bulundurularak tasarlanmıyor gibi görünüyor, bu yüzden her oyun parçasına bir dragListener dinleyicisi ekleyeceğimi düşündüm (aşağıdaki kod). Sürüklemek için iyi çalışıyor, ancak 'sürüme başlamadan önce minimum mesafeyi' 0'a ayarlamayı öğrenemiyorum ... ama bu benim ana sorum değil (herhangi bir kavrayış takdir ediciydi)Scene2d Hepinizden bana yardım edeceğini umuyordum yüzden

Neyse, aktörü döndürdüğümde büyük bir sorun ortaya çıkıyor ve sonra onu sürüklemeye çalışıyorum: 30 derece dönüşte sürükleme neredeyse normal gibi davranıyor: 60 derecede, fare çok küçük hareketleri çok hızlı bir şekilde dar bir daire içinde hareket eden aktörü gönderiyor. Başka bir 30 derece, kiremit aktörü geniş bir yayda hareket ederek, 1-2 karede ekrandan çıkar. Eğer oyuncu saat yönünde döndürülürse, hareketler saat yönünde olur; saat yönünün tersine aynı desen.

Oyuncunun çevirisi rotasyonu dikkate alıyor gibi görünüyor; Sanırım sorum şu ki, bir Aktör/Grup'u gelecek çevirileri etkileyen rotasyon olmadan döndürmek mümkün mü? Alternatif olarak, bir aktörü dokunmatik/fare girişine göre ekran etrafında sürüklemenin daha iyi bir yolu var mı? Aşağıda bazı kod dahil: Ben temel şeyleri bozmaktan ediyorum hayal ama bilemiyorum ne:

multiplexer.addProcessor(new InputAdapter() { 
    @Override 
    public boolean scrolled(int amt) { 
     if (chosenTileActor == null) 
      return false; 
     else 
      chosenTileActor.rotate(amt * 30); 
     return true; 

    } 
    }); 
:

// during initial stage creation 
tileActor.setOrigin(tileActor.getWidth()/2, tileActor.getHeight()/2); 
tileActor.addListener(new DragListener() { 
     public void dragStart(InputEvent event, float x, float y, 
       int pointer) { 
      chosenTileActor = event.getTarget(); 

     } 

     public void drag(InputEvent event, float x, float y, int pointer) {    
      Actor target = event.getTarget();    
      target.translate(x, y); 
     } 

    }); 

Ve kaydırma fare tekerleği ile rotasyon ile ilgilenen dinleyici için

İşaretçiler var mı? DragListener'ı kullanarak doğru yöne bile gidiyorum?

Okumak için teşekkürler! , Sadece sürükleme olayın sahne koordinatlarına doğrudan aktörün pozisyonunu ayarlamak yerine çeviri ait

cevap

7

: böylece aktör derhal için

tileActor.addListener(new DragListener() { 
    private float offsetX, offsetY; 

    @Override 
    public void dragStart(InputEvent event, float x, float y, int pointer) { 
    Actor target = event.getTarget(); 
    this.offsetX = event.getStageX() - target.getX(); 
    this.offsetY = event.getStageY() - target.getY(); 
    } 

    @Override 
    public void drag(InputEvent event, float x, float y, int pointer) { 
    event.getTarget().setPosition(event.getStageX() - offsetX, event.getStageY() - offsetY); 
    } 
}); 

ben dragStart içinde uzaklıklar hesaplanırken ediyorum atlamak etmediğini heryerde sürüklemeye başladığımda tıkladım (farelere göre sürükleme yapmak). Bunu test ettik ve herhangi bir dönüşle çalışır.

+1

Bu mükemmel çalıştı, teşekkürler! –

+0

'setTapSquareSize' yöntemine bakın. İsterseniz, 0F'ye ayarlayın. – Alexmelyon