2016-04-10 14 views
1

Oyunuma bazı döşemeleri yüklerken bazı sorunlar yaşıyorum. Oyun dünyam şu anda 770x450 piksel boyutuna sahip. (0, 330) konumunda tek bir döşemeyi yükledim, ancak (770, 330)'a ulaşana kadar döşemeyi x ekseni boyunca kopyalayan ve yükleyen bir döngü oluşturmak istiyorum. Sadece kodu kopyalayabilir ve her bir döşemeyi ayrı ayrı yüklemek için kodu yapıştırabilirim, fakat bu kötü bir kod olurdu. Benim kiremit Texture2D gameTile; olarak ilan edilirMonogame - Yükleme Fayansları

protected override void Initialize() 
{ 
    position = new Vector2(0, 330); 

    // x axis = 770 pixel 
    // y axis = 450 pixels 

    this.IsMouseVisible = true; 
    base.Initialize(); 
} 

:

İşte benim şimdiki Initialize() kod.

cevap

2

http://xnaresources.com/default.asp?page=Tutorial:TileEngineSeries:1

Bu bağlantı sizi kiremit motoru oluşturmak için gerekenleri en kapsayan bir öğreticidir.

Uygulamalar Sıfırlama işlevi içindeki karoları oluşturuyor gibi görünüyor. İhtiyacınız olan tüm karoları depolayacak bir çeşit kiremit yöneticisi yaratmanız daha iyi olur.

Fayans oluşturma açısından, bir Yapı Dizisi veya Dizilerin Yapısı'nı kullanabilirsiniz. İlki için, en azından karoun konumunu saklayacak bir Çini sınıfı yaratabilirsiniz. Döşemeleri oluşturmak için bir sprite sayfasını kullanıyorsanız, çizmek için hangi döşemenin kullanılması gerektiğini belirlemek üzere bir TileID'yi de ekleyebilirsiniz.

Dizilerin Yapısı için, döşemeler (Döşeme Yöneticisi'nin içinde) ve başka bir TileID dizisi için kullanılacak olan Vektörler dizisini saklayabilirsiniz. Her iki yöntem de çalışır. Okunabilirlik ve Object Oriented Programlama uygulamaları için muhtemelen sizin için öneride bulunmanızı tavsiye ederim.

Texture2D ayrıca bir kez de yüklenmelidir. Yüklemenizi yaptığınız yeri veya daha fazla fayans yapmayı nasıl planladığınıza dair bir gönderme yapmıyorsunuz, bu yüzden planınızın her karo için texture2D'yi yüklemek olduğunu varsayıyorum. Bu da kötü bir fikir olurdu.

Son olarak, karo sınıf yapılmış bir kez, döngü anlamında, sizin kiremit yöneticisi veya döngü her bir parça için pozisyon yaratmak ve ayarlanması gereken işlevi başlatmak (yalancı kod) 'de: Sonra

int tileRowCount = mapSizeX/tileSizeX; 
int tileColumnCount = mapSizeY/tileSizeY; 

for(int rowIndex = 0; rowIndex < tileRowCount; rowIndex++) 
{ 
    for(int columnIndex = 0; columnIndex < tileColumnCount; columnIndex++) 
    { 
     tileList.Add(new Tile(new Vector2(columnIndex * tileSizeX, rowIndex * tileSizeY); 
    } 
} 

için çizim:

foreach(Tile tile in tileList) 
{ 
    ///not exact Draw call, not looking at the documents right now 
    tile.Draw(spriteBatch, tileTexture, tile.Position); 
} 

Bu sizin peşinde olduğunuzu düşündüğüm şeyin özüdür. Yanlış yoldaysam, cevabı değiştireceğimi bana bildirin. Biraz daha cesur detayların üzerine atladım ama eğer herhangi bir sorunun varsa bağlantı var ve daha fazlasını isteyebilirsiniz.

DÜZENLENMİŞ: Çizim kısmı

kod biçiminde değildi
İlgili konular