Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

C# Kareyi yön tuşları ile hareket ettirme(aka yılan)


Devilmanta

Öne çıkan mesajlar

Hoca yılan oyunu verdi ama şöyle bir sorunum var
karenin hareketini Thread.Sleep() ile kontrol ediyorum yani 1/4 saniye geçiyor 10pixel atlıyor şeklinde ama bunu daha yukarı tuşuna atamamla programın donması bir oldu. Diğer tuşlara daha Thread.Sleep() atamadım onlarla kareyi hareket ettirebiliyorum ama yukarı basınca donuyor kod şöyleki:


switch (e.KeyData)
{
case (Keys.Up):
if (m_rect.Y <= 0)
{
m_rect.Y = this.Height - m_rect.Height;
}
else
{
while (m_dirChange == false)
{
m_rect.Y -= 10;
Thread.Sleep(50);
this.Invalidate();
}
}
break;
case (Keys.Down):
if (m_rect.Y >= this.Height-m_rect.Height)
{
m_rect.Y = 0;
}
else
{
m_rect.Y += 10;
}
this.Invalidate();
break;
case (Keys.Right):
if (m_rect.X + m_rect.Width >= this.Width-m_rect.Width)
{
m_rect.X = 0;

}
else
m_rect.X += 10;
this.Invalidate();
break;
case (Keys.Left):
if (m_rect.X <= 0)
{
m_rect.X = this.Width;
}
else
m_rect.X -= 10;
this.Invalidate();
break;

}


Hertürlü fikre açığım teşekkürler.
Link to comment
Sosyal ağlarda paylaş

Kaç thread var programında?


while (m_dirChange == false)
{
m_rect.Y -= 10;
Thread.Sleep(50);
this.Invalidate();
}


.NET'de nasıl bilmiyorum ama genelde GUI operasyonları farklı thread'de yapılır, program akışı farklı thread'de gerçekleşir.

Tek thread kullanıyorsan ve o thread içinde sonsuz while döngüsüne girersen GUI güncellenmediği için karenin hareket ettiğini göremezsin. Yine while döngüsünden çıkmadığın için m_dirChange'in değerini değiştirecek input'u da okuyamazsın. Bütün gün bekler durursun. ;)
Link to comment
Sosyal ağlarda paylaş

Mirage said:

Kaç thread var programında?


while (m_dirChange == false)
{
m_rect.Y -= 10;
Thread.Sleep(50);
this.Invalidate();
}


.NET'de nasıl bilmiyorum ama genelde GUI operasyonları farklı thread'de yapılır, program akışı farklı thread'de gerçekleşir.

Tek thread kullanıyorsan ve o thread içinde sonsuz while döngüsüne girersen GUI güncellenmediği için karenin hareket ettiğini göremezsin. Yine while döngüsünden çıkmadığın için m_dirChange'in değerini değiştirecek input'u da okuyamazsın. Bütün gün bekler durursun. ;)


demek istediğini anladım sanırım ve o yüzden program hata vermeden donuyor. Debug yaptığım vakitte hata vermiyor zaten.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...