Gönderen Konu: Pc'de Spritelar...  (Okunma sayısı 20641 defa)

Pc'de Spritelar...

« : 02.09.2004 15:16:54 »
Hızlı düğmeleri aç

PE&OAS

İleti: 377

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
benden iyi bilirsiniz:

C64'te spritelar vardır,türkçesi yaratıklar...Sanırım 8 tane(emin değilim)
Amiga'da 16 sprite ve kendi sprite benzeri objelerinizi yaratmak için blitter vardır,blitter sayesinde yapılanlara bob deniyordu galiba...

peki pclerde bu olay nasıl gerçekleşiyor?
-ekran kartlarında sprite varmı?
-eğer yoksa blitter benzeri kendi spritelarımızı yazmaya yarayan donanım varmı?
-ikiside yoksa nasıl oluyor?

Pc'de Spritelar...

« Yanıtla #1 : 02.09.2004 17:05:34 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Spriteler konusunda bildiklerin doğru. PC bu konudaki en yeteneksiz alettir. Sprite'ı tamamen kendi çabanla oluşturman gerekir. Klasikleşmiş iki yöntem vardır:

1. Yöntem:

* Ekranda spriteı çizeceğin alanı sınırlarından dikdörtgensel olarak hafızaya al.
* Sprite'ı üstüne çiz. Bu çizim sırasında trasparency kullanımı gerekir genelde.
* Bir sonraki frame'e geçerken hafızadaki parçayı yerine koy.
* Bir sonraki sprite pozisyonu için ilk maddeye geri dön.

Ancak bu yöntem nisbeten hızlı olmasının yanı sıra birçok muhtamel problemi beraberinde getirir. Örneğin iki sprite iç içe geçmiş olarak dururlarsa ne olacak? Bu tür olasılıklar için ikinci yöntem her zaman kesin çözümdür.

2. Yöntem:

* Her framede tüm backgroundu baştan çiz.
* Üzerine istenilen index sırasıyla spriteları bas.

Bu kadar basit :)

Blit fonksiyonlarına gelince elbetteki PC'de de var. Ancak PC'de en hızlı çalışan şey her zaman doğrudan hafızaya yazmak ve son olarak hazıfayı ekrana kopyalamaktır. Bunun için C/C++ kullanacak olursan "memcpy" türü komutları kullanabilirsin (mem.h ya da memory.h librarysinde yer alır). Diğer dillerde de benzer komutlar bulabilirsin.

Pc'de Spritelar...

« Yanıtla #2 : 02.09.2004 17:19:59 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Bu arada açıklamalarımı yeterli bulmayabilirsin. Özellikle ikinci yöntemde yine "sprite bas" dedim. Peki nasıl?

Sprite structureımızın ne özellikleri olacak. Örnek bir structure:

typedef struct SPRITE
{
     int x, y;
     int width, height;
     float ax, ay;
     BITMAP *bmp;
} mySprite;

Bu structure'ı şimdi salladım. Çok takılmaman gerekir. Ancak demek istediğim şu. Spriteların x ve y koordinatları vardır ve genellikle sol üst köşe koordinatları olarak tutulur. Genişlik ve yükseklikleri vardır. Kendi structureımızı oluşturuyorsak istediğimiz genişlik ve yükseklikte spritelar yaratabiliriz. Yatay ve düşey ivmeleri vardır. Sonuçta spriteların özelliği hareketli olmalarıdır. Bir de spriteın bitmap verilerinin okunacağı bir pointer işimizi görür.

Gelelim sprite hareket yöntemlerine. Elbetteki tek yöntem yatay ve düşey ivmeler değildir. Alternatif olarak hareket yön açısı ve tork kullanılabilir.

Pc'de Spritelar...

« Yanıtla #3 : 02.09.2004 23:31:53 »
Hızlı düğmeleri aç

spaztica

İleti: 1.493

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
directx kullanıyorsan işin rahat. bunun için de library, örnek falan herşey var dx'in sdk'sıdna. dx9'da da iyice layer mantığında yapmışlar herşeyi, böylece üstüste gelme olayı da hallediliyor. ama amiga'daki bob'un mantığında, blitter'ı kullanarak yapılan bir uygulama asla olamadı pc'de. blitter, sırf line drawing ve area filling/copying işlemleri için yapılmış bir çip olduğundan cpu'dan bağımsız çalışıyor, hızı katlıyordu. bu yüzden amiga'da vektör ve bob olayları çok keyiflidir de assembler'da programlaması. blitter, tüm maskeleme, collision detection vb olayları çok temiz çözüyordu, baş ağrıtmıyordu. bugün pc'de adamakıllı bir demo yazmak isteyen kişinin haftalarca dx'in sdk'sını yutması gerekiyor ne yazık ki. hatta sdk'da yetmiyor, anlatılanlar çok teorik olduğu için araştırması, örnek kurcalaması şart oluyor.

Pc'de Spritelar...

« Yanıtla #4 : 03.09.2004 09:58:33 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
Spaztica, DirectX'in sprite olayına çok bir kolaylık kazandırdığını düşünmüyorum. Aslında spritelar konusunda oldukça güçlü, ekranda 5000-10000 spriteı kasılmadan hareket ettirebiliyorsun. Ancak "PC'de sprite nasıl yapılır?"a "DirectX kullanarak" demezdim ben olsam (netekim demedim eheh). Yoksa haklısın DirectDraw ya da Direct3D kullanarak da sprite oluşturabilirsin tabii ki. Ancak DirectX'in Init fonksiyonlarını yazana kadar ben adam akıllı bir Sprite classı yazmış olurum. Kaldı ki DirectX'de de Sprite structure'ını tamamen kendin hazırlıyorsun, bunun için built in bir olayı yok DirectX'in.

Pc'de Spritelar...

« Yanıtla #5 : 03.09.2004 15:00:49 »
Hızlı düğmeleri aç

spaztica

İleti: 1.493

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
aslında doğru diyorsun... ben sadece okuyabildiklerimle cevap yazdım; skate'in söyledikleri pratik deneyim olduğu için muhtemelen daha doğru. ne diyeyim. bir bilen karşısından boynumuz kıldan ince. :)