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 - BSP Loader
 SSSSSS   AramaArama   Kullanıcı GruplarıKullanıcı Grupları   ProfilProfil   LoginLogin 

BSP Loader

 
Bu forum kilitlenmiştir, yeni bir başlık açamazsınız, cevap gönderebilir ya da mesajları değiştirebilirsiniz   Bu başlık kilitlenmiştir, cevap yazamaz ya da mesajları değiştiremezsiniz    www.oyunyapimi.org Forum Ana Sayfası -> OyunYapımı
Önceki başlık :: Sonraki başlık  
Yazar Mesaj
MD-C



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

MesajTarih: Thu Apr 22, 2004 3:02 pm    Mesaj konusu: Alıntıyla Cevap Ver

ANSI/ISO C++ standartlarında Quake III BSP dosyası yükleyen bir uygulama biliyormusunuz? Açık kaynak kodu var mı? Hani nerede?

Çoğu baktığım BSP loader'lar ne kadar C++ ile yazılmış olsada dosya okuma ve yazma işlemlerinde C'nin fread(..); fwrite(...); gibi fonksiyonlar içeriyor bunun C++ sitili olannından yuhmu?
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et
Ziyaretci



Kayıt: Apr 24, 2003
Mesajlar: 287
Nereden: İstanbul

MesajTarih: Thu Apr 22, 2004 3:09 pm    Mesaj konusu: Alıntıyla Cevap Ver

fread ve fwrite blok okumalar için çok güzel metodlardır. C++ ın default I/O su ise stream den (dan mı demeliyim?) okumak üzere tasarlanmıştır.
Büyük binary data dosyalarını okurken blok okumalar yapmak hem daha performanslı, hem daha kolaydır.
Ayrıca fread/fwrite ikilisinin C++ ı zedeleyeceğini düşünmüyorum. fprintf / fscanf kötü, çünkü fileinput/output stream classları onların yerine geldi.. ama fread / fwrite galiba bişey yok. (yada şu an aklıma gelmiyo..)

Bu sebeple: fread lere pek üzülme derim..
illa ki stream istiyorsan, kendi overloaded >> << operatörlerini yaz, blok blok okut. kodu kendin çevir..

kolay gelsin..
Başa dön
Kullanıcı profilini gör
ferdemoncel



Kayıt: Nov 03, 2003
Mesajlar: 277
Nereden: Eskişehir

MesajTarih: Thu Apr 22, 2004 4:04 pm    Mesaj konusu: Alıntıyla Cevap Ver

Evet MDC read ve write yöntemleriyle yaptığın okuma ve yazma genelde pek tavsiye edilmiyor. C++ için. Bunun tam nedenini tam olarak bilmemekle beraber dosya yazarken ya da okurken kayıt ettiğin bilgilerin işlemciye göre farklı kaydedildiğini biliyorum.

Örneğin aşağıdaki Öğrenci adında bir sınıfı daha nesnesel bir yöntemle nasıl yazabilirim diye düşünürken çeşitli denemeler yapmıştım:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

class Ogrenci
{
short numara;
char adi[20];
public:
void VeriAl()
{
cout << "Numarasi: ";
cin >> numara;
cout << "Adi: ";
cin >> adi;
}
};

int main()
{
Ogrenci ogr;
ogr.VeriAl();

ofstream dosya("deneme.txt", ios::binary);

dosya.write((char*) &ogr, sizeof(ogr));

return 0;
}

İşte bunu yaparken Ziyaretçinin dediği gibi << ve >> operatörlerini aşırı yükleyerek yapmanın daha iyi bir yöntem olduğunu öğrendim.

Örneğin sınıfın kurucu işlevi:

class Ogrenci
{
/* ... */
public:
Ogrenci(short numara, string const & adi);
/* ... */
};



Ogrenci ogrenciOku(istream & giris)
{
short numara;
giris >> numara;

string adi;
giris >> adi;

return Ogrenci(numara, adi);
}



Veri Al İşlevi:

class Ogrenci
{
friend istream & operator>> (istream & giris, Ogrenci const &);
/* ... */
};

istream & operator>> (istream & giris, Ogrenci const & ogrenci)
{
ogrenci = ogrenciOku(giris);
return giris;
}

int main()
{
Ogrenci ogrenci;

/* ... */
/* 'giris' burada tanimlanmis bir giris akimi olsun */
giris >> ogrenci;
}


Yazdırma İşlemi:

ostream & operator<< (ostream & cikis, Ogrenci const & ogrenci)
{
return cikis << "Numarasi: " << numara << '\n'
<< "Adi: " << adi << '\n';
}


Not : Henüz benim de C++ bilgim ikinci örnekleri anlamakta yetersiz kalıyor.Şimdilik Smile
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et
ferdemoncel



Kayıt: Nov 03, 2003
Mesajlar: 277
Nereden: Eskişehir

MesajTarih: Thu Apr 22, 2004 4:06 pm    Mesaj konusu: Alıntıyla Cevap Ver

Bu ikinci örneği de belki bu yöntemi kullanmak istersen sana bir fikir verebilir diye alıntı yaptım.İkinci örnekleri ben yazmadım.

[ Bu mesajı düzenleyen: ferdemoncel _FIL 22-04-2004 17:10 ]
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et
leblebi



Kayıt: Jan 05, 2004
Mesajlar: 127
Nereden: q3dm17

MesajTarih: Thu Apr 22, 2004 6:30 pm    Mesaj konusu: Alıntıyla Cevap Ver

MD-C, senin soruna cevap degil ama fread ve fwrite ile ilgili bir yorum yapiyim.

Genelde oyunlarda PAK sistemi vs. oldugu icin ve disc access'i hizli olmadigi icin, fread ve fwrite olayini en iyisi sadece bir kere yapmak. Onun yerine yazicagin BSP loader modulu dosyayi hafizadan process etmeli. C++'daki iostreamlere hakim degilim onun icin direk bir yontem gosteremiycem.

Sadece BSP degil, yazdigin butun dosya okuma islemleri dosyayi hafizadan okumali. Ornegin benim PAK sisteminde dosya okuma interface'i soyle:

Code:

BYTE *PAKMgr::LoadFile ( char *relative_path, int *length )
{
}



Bu LoadFile fonksiyonu butun PAKlari ve butun windows directory sistemini de tariyo. Yani oyunlarda gordugun ister PAK sistemi kullan ister kullanma yada istersen ikisini karistir kullan.

Bunun disinda hicbi modulun kendi kendine dosya acma izni yok. (basepath isini de boylece temiz bi sekilde hallediyosun)

Sorunun cevabi degil ama en azindan moduler dizayn acisindan soruya bakis acini degistirebilecek bir fikir.

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: Sat Apr 24, 2004 10:26 pm    Mesaj konusu: Alıntıyla Cevap Ver

>> yada << operatörünü stream amacında overload yapmanın pek bir mantığı yok...
ne yapalım bükemediğimiz eli öpecez fwrite ve fread'a devam o zaman...
Başa dön
Kullanıcı profilini gör E-Posta'yı gönder Kullanıcının web sitesini ziyaret et
Mesajları göster:   
Bu forum kilitlenmiştir, yeni bir başlık açamazsınız, cevap gönderebilir ya da mesajları değiştirebilirsiniz   Bu başlık kilitlenmiştir, cevap yazamaz ya da mesajları değiştiremezsiniz    www.oyunyapimi.org Forum Ana Sayfası -> OyunYapımı 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.164 Saniye