Baiklah, dirumuskan dengan cara ini saya yakin kedengarannya tidak jelas, tetapi saya akan melakukan yang terbaik untuk menggambarkan masalah saya.
Pertama, izinkan saya menjelaskan apa yang salah dengan kode sumber asli saya.
Saya membuat platformer, dan di sini adalah komponen saat ini dari permainan saya: Level , yang memegang kotak ubin sendiri dan juga lembar ubin dan Ubin , yang hanya menyimpan nama lembar ubin dan indeksnya di dalam lembaran genteng. Semua ini berada dalam proyek game XNA yang terpisah, bernama GameLib.
Berikut adalah bagaimana level saya diformat dalam file teks:
x x . . . . .
. . . b g r .
. . . . . . .
X X X X X X X
Di mana .
mewakili ubin kosong, b
mewakili platform biru, X
mewakili blok dengan warna acak, dll.
Alih-alih melakukan semua pekerjaan memuat level dalam kelas Level , saya memutuskan untuk mengambil keuntungan dari ekstensi pipa konten dan membuat LevelContentPipelineExtension.
Segera setelah saya mulai, saya segera menyadari bahwa saya tidak ingin kode-keras 20+ baris semacam itu:
if (symbol == 'b')
return new Tile(/*...*/);
Jadi, dengan harapan setidaknya memusatkan semua pembuatan konten ke dalam satu kelas, saya membuat kelas statis, yang disebut LevelContentCreation , yang menyimpan informasi tentang simbol mana yang menciptakan apa dan semua jenis barang ini. Ia juga menyimpan daftar semua jalur aset lembaran ubin, untuk memuatnya nanti. Kelas ini ada dalam proyek perpustakaan game GameLib saya.
Masalahnya adalah, saya menggunakan kelas statis LevelContentCreation ini di kedua kelas Tingkat saya (untuk memuat lembaran ubin yang sebenarnya) dan ekstensi pipa konten saya (untuk mengetahui simbol mana yang mewakili ubin apa) ...
Dan inilah tampilan kelas LevelContentCreation saya :
public static class LevelContentCreation
{
private static Dictionary<char, TileCreationInfo> AvailableTiles =
CreateAvailableTiles();
private static List<string> AvailableTileSheets { get; set; }
/* ... rest of the class */
}
Sekarang, karena kelas LevelContentCreation adalah bagian dari perpustakaan permainan, ekstensi pipa konten mencoba menggunakannya tetapi panggilan ke CreateAvailableTiles () tidak pernah terjadi dan saya tidak dapat memuat objek Level dari pipa konten.
Saya tahu ini karena pipa konten dijalankan sebelum kompilasi yang sebenarnya atau sesuatu seperti itu, tetapi bagaimana saya bisa memperbaiki masalahnya?
Saya tidak bisa benar-benar memindahkan kelas LevelContentCreation ke ekstensi pipa, karena kemudian kelas Level tidak akan dapat menggunakannya ... Saya sangat tersesat dan saya tidak tahu harus berbuat apa ... Saya tahu ini adalah keputusan desain yang sangat buruk, dan saya ingin jika seseorang dapat mengarahkan saya ke arah yang benar.
Terima kasih atas waktu berharga Anda.
Jika ada sesuatu yang tidak cukup jelas atau jika saya harus memberikan lebih banyak informasi / kode, silakan tinggalkan komentar di bawah ini.
Sedikit informasi lebih lanjut tentang proyek saya:
- Game - proyek game XNA Windows. Berisi referensi ke: Engine, GameLib dan GameContent
- GameLib - proyek perpustakaan game XNA. Berisi referensi ke: Engine
- GameContent - proyek konten XNA. Berisi referensi ke: LevelContentPipelineExtension
- Engine - proyek perpustakaan game XNA. Tidak ada referensi.
- LevelContentPipelineExtension - ekstensi pipa konten XNA. Berisi referensi ke: Engine dan GameLib
Saya tahu hampir tidak ada tentang XNA 4.0 dan saya sedikit bingung tentang bagaimana konten bekerja sekarang. Jika Anda memerlukan informasi lebih lanjut, beri tahu saya.