Ana Menü
· Ana Sayfa
· Dosyalar
· Dökümanlar
· Forum
· Günün Resmi
· Haber Arşivi
· WWW Linkleri
· Üye Listesi

     Forumlar

 strncpy ve strncpy_s
 Konu adi : Borland c++ Builder ile Amiral Batti
 Rady10 - YerliOyun
 Kabusta Kaybolmak
 Konsol da programı bekletmek
 Oyun programlama icin hangi programlama dilli ?
 flash! şanlıurfa bilgisayar oyununda(no rapid)
 Sevgilim Olur musun?
 Directx'e başlamak isteyenler bi bakın
 PSP programlama
 Flash tan php
 Bilgisyr oyunu yapmam için üniverstde hangi bölüme girmeliym
 www.arshiv.gen.ms
 Cimg.h ilgilenenler icin
 müttefik oyunu

Konu Disi
 Emraah
 Yeni sitemiz açıldı
 Kalp krizi durumunda ne yapılmalı?
 Oyun sektöründe hangi görevde çalışmak isterdiniz?
 Takım arkadaşı sorunu
 msn de renklı nıck
 pc hata veriyor ! YARDIM!!
 Gülmek isteyenler Buraya
 İnanılmaz hl 2 modu görüntüsü
 Computer Languages History

[ Forumlara Git ]


oyunyapimi.org: Forums

www.oyunyapimi.org :: Başlığı Görüntüle - SDL hakkında soru
 SSSSSS   AramaArama   Kullanıcı GruplarıKullanıcı Grupları   ProfilProfil   LoginLogin 

SDL hakkında soru

 
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> OpenGL, DirectX
Önceki başlık :: Sonraki başlık  
Yazar Mesaj
coolprogrammer



Kayıt: Apr 30, 2005
Mesajlar: 71
Nereden: Ankara

MesajTarih: Sun Jul 24, 2005 12:48 pm    Mesaj konusu: SDL hakkında soru Alıntıyla Cevap Ver

Arkadaşlar, size üç sorum olacak.Birincisi:
Örneğin:
Kod:

SDL_Surface *resim;
resim=SDL_LoadBMP("resim.bmp");
SDL_Rect resimpozisyon;
hedef.x = x;
hedef.y = y;
SDL_BlitSurface(resim, NULL, screen, &resimpozisyon);

Böyle bir kod yazdığımızı düşünelim.Örneğin oyunun bir yerinde ben bu resmin değiştirilmesini istedim.Şöylemi yapacağım o yerde:
Kod:

resim=SDL_LoadBMP("resim2.bmp");

Yoksa bunu yapmak için ayrı bir fonksiyon ya da teknik mi var?
İkinci sorum ise animated gifleri yükletmek için bir fonksiyon, teknik ya da kütüphane var mı?
Üçüncü sorumsa çizdiğim bir resmi nasıl silebilirim?(SDL'de tabi paint'de değil Very Happy )
Başa dön
Kullanıcı profilini gör
MD-C



Kayıt: Feb 26, 2003
Mesajlar: 1258
Nereden: Dünya.Türkiye(54)

MesajTarih: Sun Jul 24, 2005 12:56 pm    Mesaj konusu: Alıntıyla Cevap Ver

Boşver SDL'i ben sana GL anlatayım:

Sanırım amacın bir sprite olayı yapmak yani texture animation, bunun için animasyonu yapacak tüm resimleri yüklersin ve doku yaparsın, daha sonra tanımladığın bir zaman sistemine göre uygun zamanda glBindTexture(GL_TEXTURE_2D, Anime[i].ID); ile dokuyu değiştirirsin... İşte sana anime...
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et
MD-C



Kayıt: Feb 26, 2003
Mesajlar: 1258
Nereden: Dünya.Türkiye(54)

MesajTarih: Sun Jul 24, 2005 1:04 pm    Mesaj konusu: Alıntıyla Cevap Ver

Yada animasyon resimleri tek dokuda ise, yine uygun zamanda, gösterilmesi istenen resimleri konumlandırırsın:

glBegin(GL_QUDS);
glTexCoord2f(Anime[i].PosX, Anime[i].PosY).... // Sol üst köşe
glTexCoord2f(Anime[i].Geni, Anime[i].PosY).... // Sağ üst köşe
glTexCoord2f(Anime[i].Geni, Anime[i].Yuks).... // Sağ alt köşe
glTexCoord2f(Anime[i].PosX, Anime[i].Yuks).... // Sol alt köşe
glEnd();
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et
MD-C



Kayıt: Feb 26, 2003
Mesajlar: 1258
Nereden: Dünya.Türkiye(54)

MesajTarih: Sun Jul 24, 2005 1:12 pm    Mesaj konusu: Alıntıyla Cevap Ver

SDL'de kullanmak istediğin olay, Belleği öldürür, ekran kartı belleği varken, sistemde tutmak saçma olur vede dinamik yapılacaksa eğer yani olay anında yüklenecekse hız kaybına neden olur. Bu yüzden hepsini Initialize kısmında yükle ve doku yap, daha sonra bellekteki resimler sil... He bunu nasıl yaparsın bilmem SDL bilen birine sormak gerek!
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et
coolprogrammer



Kayıt: Apr 30, 2005
Mesajlar: 71
Nereden: Ankara

MesajTarih: Sun Jul 24, 2005 3:59 pm    Mesaj konusu: Alıntıyla Cevap Ver

Cevabın için teşekkürler MD-C fakat ben 2d bir oyun yapacağım için OpenGl kullanamıyorum o yüzden SDL kullanmam gerekiyor.Bir de Ragnor'a sorayım.Teşekkürler...
Başa dön
Kullanıcı profilini gör
Ragnor



Kayıt: Jan 26, 2003
Mesajlar: 218
Nereden: Bursa

MesajTarih: Sun Jul 24, 2005 5:56 pm    Mesaj konusu: Alıntıyla Cevap Ver

@MD-C: SDL'de ekran kartı belleğini kullanmak istersen yapman gereken SDL'i çalıştırırken SDL_HWSURFACE bayrağı ile başlatman. Bu sayede ekran kartı belleğini kullanacaktır. Ya da çok büyük bir yanılgı içerisindeyim Smile.

@coolprogrammer: Şimdi sorularını cevaplayayım. Sondan başlayacağım.
3- Şimdi ekrandaki görüntü her elemanı ekrandaki bir pixel'i temsil eden ve içerisinde o pixel'in renk değerini saklayan bir dizidir aslında. Böyle olunca ekrana çizdirdiğin her şey çizildiği koordinatlardaki rengi değiştirir. Silmek içinse o pixel'e siyah ya da arkaplan ne ise o rengi çizdirebilirsin.
2- Animated gifler ile animasyon yapmayı aklından bile geçirme. Gifleri yüklemek için SDL_Image kütüphanesini kullanabilirsin. Bu kütüphane yardımı ile png, jpg,gif vs. birçok resim formatını yükleyebilirsin. Animasyon için ne yapman gerektiği ise bir sonraki cevapta.
1- Şimdi basitçe soruna evet diye cevap verebilirim. Ama ele alınması gereken birçok konu var burada. Nasıl başlasak? Hmm...
Şimdi ilk olarak bu kodda önce değişken tanımlamalarını yapıyor, sonra değişkenlere veri yüklüyor ardından da ekrana çizim yapıyorsun. Sorun şu ki animasyon istiyorsan yapman gereken şey ayrı bir çizim fonksiyonu yapmak ve program döngüsü boyunca bu çizim fonksiyonunu çağırman. Aşağıdaki kodları çizim fonksiyonu içerisinde kullanman pek yararlı değil çünkü bu yüzden ekrana her çizim yapıldığında resim yüzeyine dosyadan veri okunarak resim bilgisi atanır. Bu hem programı yavaşlatır hem de hafızayı doldurur. Düşün durmadan aynı resmi hafızaya yüklüyorsun. Bundan kurtulmak için programda, oyunda kullanacağın bütün değişkenleri önceden tanımla ve dışarıdan dosyadan alacağın verilerin hepsini yine bu program döngüsüne girmeden yükle. Sonrada çizim fonksiyonunda bu önceden yüklenmiş verileri kullan. Mesela
Kod:

//SDL_Surface *resim; 'i önceden tanımla!
resim=yaratik[1]; /* yaratik dizisi burda yaratıkların resimlerinin saklandığı dizidir. dizi indeksini değiştirerek istediğin resmi yükleyebilirsin. Bu demektir ki 1 yerine bir başka değişken kullanman daha iyi olur.*/
SDL_Rect hedef;
hedef.x = x;
hedef.y = y;
SDL_BlitSurface(resim, NULL, screen, &resimpozisyon);

Animasyon, yani sprite animasyonu için yapman gereken şey bir diziye önceden sprite'ın animasyonunun her karesini yüklemek ve ekrana çizdirirkende bu animasyonun hep bir sonraki karesini çizdirmek.
Yukarıda basitçe açıklamaya çalıştım. Umarım işine yaramıştır. Kafanda hala sorular varsa arkadaşımla yaptığımız ufak bir animasyon çalışması var. Basitçe bir adamı 8 yönde yürütebiliyorsun. Onu sana yollarım ve kodlarını incelersin.
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et MSN Messenger
coolprogrammer



Kayıt: Apr 30, 2005
Mesajlar: 71
Nereden: Ankara

MesajTarih: Sun Jul 24, 2005 8:18 pm    Mesaj konusu: Alıntıyla Cevap Ver

Cevabın için teşekkürler Ragnor gerçekten çok saol bakalım anlamışmıyım.Bu bazı yerlerde resmi değiştirmek için:
Kod:

SDL_Surface *resim;
resim=yukle[1];
yukle[1]=SDL_LoadBMP("bmpresim.bmp");
yukle[2]=SDL_LoadBMP("bmpresim2.bmp");
yukle[3]=SDL_LoadBMP("bmpresim3.bmp");
SDL_Rect poz;
poz.x = x;
poz.y = y;
SDL_BlitSurface(resim, NULL, screen, &poz);
if (...)
{
resim=yukle[2];
}
else if (...)
{
resim=yukle[3];
}

Bu da sürekli animasyon yapmak için:
Kod:

int a==0;
SDL_Surface *resim;
while (1)
{
resim=yukle[a];
anim[1]=SDL_LoadBMP("bmpresim.bmp");
anim[2]=SDL_LoadBMP("bmpresim2.bmp");
anim[3]=SDL_LoadBMP("bmpresim3.bmp");
SDL_Rect poz;
poz.x = x;
poz.y = y;
SDL_BlitSurface(resim, NULL, screen, &poz);
a++;
}

Umarım doğrudur, cevabın için yeniden teşekkürler Ragnor ...
Çalışmalarınızda başarılar...
Başa dön
Kullanıcı profilini gör
Ragnor



Kayıt: Jan 26, 2003
Mesajlar: 218
Nereden: Bursa

MesajTarih: Sun Jul 24, 2005 10:01 pm    Mesaj konusu: Alıntıyla Cevap Ver

2 Kodda da birkaç hata var.

1. si için
Kod:

SDL_Surface *resim;
SDL_Surface *yukle[4];
yukle[1]=SDL_LoadBMP("bmpresim.bmp");
yukle[2]=SDL_LoadBMP("bmpresim2.bmp");
yukle[3]=SDL_LoadBMP("bmpresim3.bmp");
resim=yukle[1];
SDL_Rect poz;
poz.x = x;
poz.y = y;
if (...)
{
resim=yukle[2];
}
else if (...)
{
resim=yukle[3];
SDL_BlitSurface(resim, NULL, screen, &poz);
}

şeklinde olmalı.

Sonra 2. kod ise
Kod:

int a=0;
SDL_Surface *resim;
SDL_Surface *anim[4];
anim[1]=SDL_LoadBMP("bmpresim.bmp");
anim[2]=SDL_LoadBMP("bmpresim2.bmp");
anim[3]=SDL_LoadBMP("bmpresim3.bmp");

while (1)
{
resim=anim[a];
SDL_Rect poz;
poz.x = x;
poz.y = y;
SDL_BlitSurface(resim, NULL, screen, &poz);
if (a<3)
  a++;
else
  a=1;
}


İki kodu bu şekle çevirirsen sorunun kalmaz. Şimdi uzun uzun anlatmak için zamanım yok ama anlamışsındır artık. Smile
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et MSN Messenger
Mesajları göster:   
Yeni Başlık Gönder   Cevap Gönder    www.oyunyapimi.org Forum Ana Sayfası -> OpenGL, DirectX Tüm saatler GMT +2 Saat
1. sayfa (Toplam 1 sayfa)

 
Forum Seçin:  
Bu forumda yeni konular açamazsınız
Bu forumdaki mesajlara cevap veremezsiniz
Bu forumdaki mesajlarınızı değiştiremezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu forumdaki anketlerde oy kullanamazsınız


Powered by phpBB 2.x.x © 200x phpBB Group
Türkçe Çeviri : Onur Turgay & Erdem Çorapçıoğlu
Türkçe Düzenleme: Alexis Canver
Version 2.x.x of PHP-Nuke Port by Tom Nitzschner © 200x www.toms-home.com




Web site powered by PHP-Nuke
Web site engine\'s code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Sayfa Üretimi: 0.114 Saniye