Çıktı yapmanız gereken satır ve sütun sayısını bulmak için pencere genişliğini ve yüksekliğini kontrol etmeli ve buna göre değiştirmelisiniz. OnResize olaylarını dinlemeyi ve genişliği ve yüksekliği buna göre değiştirmeyi unutmayın.
Bunu metinsel şekilde yapmak istediğinizde, bunu tek aralıklı yazı tipi ve her hücrenin bir karakter içerdiği bir tablo ile metin kullanarak yapabilirsiniz.
Tek tek karakterleri adreslemek için <table>
, her biri <td>
x ve y koordinatlarından oluşan bir kimliğe sahip doğru sayıda satır ve sütun içeren bir a oluşturabilirsiniz. Bu şekilde, münferit hücreleri kimliğe göre ele alabilir ve içHTML'sini değiştirerek harfi değiştirebilir ve renklerini değiştirmek için css sınıflarını değiştirebilirsiniz.
Bununla birlikte, bir tuval kullanmak daha hızlı olabilir, çünkü değiştirmeniz gereken her karakter için büyük bir DOM ağacını manipüle etmeniz gerekmez. Bu arada Cüce Kalesi de benzer bir şey yapıyor. Nesneleri temsil etmek için kullanılan karakterler gerçek metin çıktısı değil, aslında bitmap'lerdir ve 2 boyutlu grafik API'leri kullanılarak çizilirler. HTML5 tuvali bunun için iyi donanımlıdır. Bu sahiptir context.fillText tuvalin metni çizebiliriz yöntemi. Bu, tek tek karakterler çizmek için kullanılabilir. Context.fillStyle öğesini çağırarak context.font değişkenlerini ve her harfin rengini değiştirerek boyut ve yazı tipi yüzünü değiştirebilirsiniz .
Fontları rasterleştirmenin pahalı olduğu ve bildiğim hiçbir tarayıcı önbelleğe alma kullandığından, çerçeve başına yüzlerce kez fillText çağrılmasının yavaş olabileceğini unutmayın. Bu, aynı harfi aynı ayarlarla yüz kez oluşturduğunuzda, yüz kez yeniden rasterleştirileceği anlamına gelir. Performansı artırmak için her harfin rasterleştirilmiş görünümünü her bir renkle gizli bir tuvalde önbelleğe alabilir ve ardından bu gizli tuvalleri context.drawImage kullanarak çizebilirsiniz . Bir tuvalden diğerine kopyalamak genellikle yazı tipi rasterleştirmesinden çok daha hızlıdır.
Şu anda tuval kullanarak 2d bir oyun geliştiriyorum ve en büyük FPS yiyicinin yazı tipi çizimi olduğunu fark ettim. Rasterleştirilmiş metin için bir önbellek eklediğimde, performansı çok artırdı.