Önceki başlık :: Sonraki başlık |
Yazar |
Mesaj |
coolprogrammer
Kayıt: Apr 30, 2005 Mesajlar: 71 Nereden: Ankara
|
Tarih: Mon Aug 29, 2005 9:50 am Mesaj konusu: sonsuz bir dizi tanımlamak |
|
|
Arkadaşlar ben bir oyun üzerinde çalışıyorum ve neredeyse sonsuz sayıda elemanı olan bir SDL_Surface tanımlamak istiyorum.Göstericilerle ilgili bir kuşkum var bilgisayarı bozar mı diye o yüzden size sorayım dedim:
Şöylemi tanımlıyım:
Kod: |
SDL_Surface *resim[];
|
Yoksa ihtiyacım olduğunda a'yı bir arttırarak istediğim kadar resim elde etmek için şöylemi tanımlıyım:
Kod: |
int a=300;
SDL_Surface *resim[a];
if (ifade)
{
a++;
}
|
Son kodda böyle yaparsam '*resim' kendini yeniden mi tanımlar yoksa gösterici hatası mı oluşur?Hangisi sizce doğru?Daha doğrusu var mı? Ayrıca ilk kodda resimin istediğim elemanında erişebilir miyim?Cevaplarınız için şimdiden teşekkürler... |
|
Başa dön |
|
|
vmeydaneri
Kayıt: Dec 08, 2004 Mesajlar: 583 Nereden: Ankara
|
Tarih: Mon Aug 29, 2005 11:23 am Mesaj konusu: |
|
|
Slm ,
Sanirim amacin Sprite tarzi bisi olusturmak.Yanliz bunun icin bu tarz bisikulanilmiyor onun yerine Liste yontemi kulanirsan istedigin kadar nesne basabilirsin ekrana ama sonucta onunda bir siniri olcaktir.
Liste yontemi ne dersen yandaki menudeki Mos2d Oyun Motorunu indirip bakabilirsin icinde Duvarkiran adli oyun var orda bloklar icin bu liste yontemi kulanildi.
Kisa bir ornek verecek olursak:
xxxxListe;
xxxxListe.Ekle(...);
xxxxListe.Cikar(...);
Bu tarz bisi. |
|
Başa dön |
|
|
DG
Kayıt: Mar 06, 2004 Mesajlar: 351 Nereden: Eskişehir
|
Tarih: Mon Aug 29, 2005 11:45 am Mesaj konusu: Re: sonsuz bir dizi tanımlamak |
|
|
Kod: |
SDL_Surface *resim[];
|
Bu kod derlemez. Sebebi ise statik bir dizinin kaç tane öğe barındıracağının derleme-zamanında belirlenememiş olması.
Kod: |
int a=300;
SDL_Surface *resim[a];
if (ifade)
{
a++;
}
|
Bu kod da derlemez. Sebebi yine aynı. Bir satır üstte int a = 300 demişsin ama o değer çalışma-zamanında belirlenebilir sadece ve o satır işletilirken değerinin 300 olacağının bir garantisi yok. eğer "const int a = 300" veya "#define a 300" dersen sorun çözülür.
Şimdi gelelim senin istediğin şeye. Eğer çalışma-zamanında bellek ihtiyacına göre büyüyüp küçülebilen diziler istiyorsan, dinamik bellekle çalışmalısın.
Bellek isterken:
Kod: |
SDL_Surface **resim = new SDL_Surface[a]; |
resim'in işaret ettiği alanın büyüklüğünü değiştirmek için de realloc() gibi yapılar kullanmalısın (biri bunların C++ karşılığını hatırlatırsa çok makbule geçer)
STL'in içindeki list yapısını da kullanabilirsin. Gayet esnek bir containerdır.
Kolay gelsin |
|
Başa dön |
|
|
coolprogrammer
Kayıt: Apr 30, 2005 Mesajlar: 71 Nereden: Ankara
|
Tarih: Mon Aug 29, 2005 12:16 pm Mesaj konusu: |
|
|
Cevaplarınız için çok teşekkürler arkadaşlar sanırım anladım:
Kod: |
int b=300;
int sayi;
SDL_Surface *resim[b];
if (sayi=b)
{
SDL_Surface *resim = new SDL_Surface[b+100];
}
|
Yeniden teşekkürler ve başarılar... |
|
Başa dön |
|
|
DG
Kayıt: Mar 06, 2004 Mesajlar: 351 Nereden: Eskişehir
|
Tarih: Mon Aug 29, 2005 1:22 pm Mesaj konusu: |
|
|
coolprogrammer demiş ki: |
Cevaplarınız için çok teşekkürler arkadaşlar sanırım anladım:
Kod: |
int b=300;
int sayi;
SDL_Surface *resim[b];
if (sayi=b)
{
SDL_Surface *resim = new SDL_Surface[b+100];
}
|
Yeniden teşekkürler ve başarılar... |
Yazdığın kodda hatalar var. Yine const olmayan bir ifade ile statik bir dizi ilklendirmişsin ve if'in içindeki ifade (sayi=b) şeklinde yani eğer b 0 veya 0.0 değilse her zaman true döner.
Açıkcası bu kodun hangi amaca hizmet etmeye çalıştığını anlayamadım. Bence std::list 'i bir dene. |
|
Başa dön |
|
|
vmeydaneri
Kayıt: Dec 08, 2004 Mesajlar: 583 Nereden: Ankara
|
Tarih: Mon Aug 29, 2005 1:50 pm Mesaj konusu: |
|
|
Kod: |
int b=300;
int sayi;
SDL_Surface *resim[b];
if (sayi=b)
{
SDL_Surface *resim = new SDL_Surface[b+100];
}
|
Zaten burda sayi = b demis yani sayi = b yapmis
if(sayi == b) olmasi gerekti.
neyse neden bunla zaman kaydiyorsun iste bir liste kulanman gerek obur turlusu isine yaramaz ya arkadasin dedigi gibi
std:list kullan veya
Mos2d oyun motorunu indir ordaki listeyi kulan .. |
|
Başa dön |
|
|
|