2016-03-20 26 views
0

Libgdx'de bir terraryum klon üzerinde çalışmaya başladım ve fayans üretimine başladım. Fayanslar 16x16 parçalar halinde ayrılır, ancak tüm parçalar yumurtlanırsa çok uzun sürer. Şu anda 400 parça (102400 fayans) üretiyorum. Dobiş sınıfının içindekiLibgdx Terraria klon dünyasının yaratılması çok uzun sürüyor

data = new int[width][height]; 
    for(int y = 0; y < height; y++){ 
     for(int x = 0; x < width; x++){ 
      data[x][y] = 1; 
     } 
    } 
    chunks = new Chunk[chunks_x][chunks_y]; 
    for(int y = 0; y < chunks_y; y++){ 
     for(int x = 0; x < chunks_x; x++){ 
      chunks[x][y] = new Chunk(x, y, this); 
     } 
    } 

Çini yumurtlama kodu: Burada i parçalarını yumurtlamaya nasıl

tiles = new Block[World.chunkSize][World.chunkSize]; 
    for(int vy = 0; vy < World.chunkSize; vy++){ 
     for(int vx = 0; vx < World.chunkSize; vx++){ 
      if(world.GetTile(vx + x * World.chunkSize, vy + y * World.chunkSize) >= 1) 
       tiles[vx][vy] = new Block(vx * 16 + x * World.chunkSize * 16, vy * 16 + y * World.chunkSize * 16, world.data[x * World.chunkSize + vx][y * World.chunkSize + vy]); 
     } 
    } 

o boyutta bir dünya yaklaşık 2+ dakika sürer oluşturuluyor. Bunun çok büyük bir sayı olduğunu biliyorum, ama terraria'nın (ya da herhangi bir başka klonun) bu zamanı nasıl daha küçük hale getirdiğini merak ediyorum. Teşekkürler!

DÜZENLEME: İşte blok sınıfı (http://pastebin.com/SFCkJKur) ve varlık sınıfı (http://pastebin.com/w3ay2nkb).

+0

You emin yaklaşık 102.400 fayans için bir göz here almak?Test amaçlı bir milyondan fazla fayansla çok daha büyük haritalar ürettim, birkaç saniye içinde yüklenecekti. Sanırım 16x16x400 yapıyorsunuz yani 102400 olacak. Şu anda gönderdiğiniz kodda tuhaf bir şey göremiyorum, bu karolar bayt cinsinden ne kadar büyük? Tam kiremit sınıfını gösterebilir misin? İçinde doku verileri gibi şeyler saklıyorsanız, bu bir darboğaz olacaktır. – Madmenyo

+0

Bellekte 102400 doku oluşturuyorsunuz, bu opengl'in aynı dokuyu yükleme ve yeniden yükleme işlemine geçmesini sağlamaya çalıştığınızda, sadece [sarılı bir doku] kullanın (https://github.com/libgdx/libgdx/wiki/Textures, -textureregion-ve-spritebatch) kullanarak bir [varlık yöneticisi] (https://github.com/libgdx/libgdx/wiki/Managing-your-assets) ve varlık sadece render için bir TextureRegion kullanın, ayrıca bir fallout_shelter oluşturma/terraria/cüce kale klonu, bir saniyeden daha az yüklü bir milyon çini (https://qls.pw/C0P) var, GPU olmadan bir bilgisayarda sabit 60 fps ile render yapmak için culling yapıyor .. – Hllink

cevap

2

Chunk ve Block sınıflarının amacı nedir? Sunum için mi? Çünkü bunu düşündüğünüzde, bunu yapmak için 'un olmasına gerek yoktur. Oyuncunun görebileceği fayansları sadece şu anda ve daha fazlasını yapmanıza gerek yok.

Bu nitelikteki oyunların çoğu, oyuncunun mevcut konumunu belirler ve daha sonra hangi döşemelerin/parçaların oluşturulmasının gerektiğini ve nerede olduğunu tam olarak hesaplar. Öte yandan


Chunk ve Block sınıflar sadece içindir,:

Buradan o konuda başlamak için iki iyi kaynaklarıdır Dünyayı oluşturan verileri içeren? Bu durumda onları da başlatmanız gerekmez. Verilerinizi daha hafif bir şekilde saklamanız gerekir - belki dosya sisteminde.

Sen Söz konusu libgdx işaret
0

bu motor Çini haritalar işlemek bir iyi yapılmış Harita API ile gelir ve diğer yararlı özelliği sağlar:

Performans hususlar

: Resmi WIKI Libgdx için ilgili

Oluşturucuları olabildiğince hızlı hale getirmeye çalışırken, işleme performansını artırmak için göz önünde bulundurmanız gereken birkaç şey vardır.

Yalnızca bir katmandaki tek bir döşemeden set karoları kullanın. Bu doku bağını azaltacaktır. Opak olarak harmanlamaya ihtiyaç duymayan karoları işaretleyin. adresinde, sadece bu program aracılığıyla yapabileceğiniz anda, editörde veya otomatik olarak yollarını sağlayacağız. katman sayısı ile denize girmeyin.

ayrıca bilgi

İlgili konular