Devilmanta Mesaj tarihi: Haziran 10, 2009 Mesaj tarihi: Haziran 10, 2009 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.
Ractamainus Mesaj tarihi: Haziran 10, 2009 Mesaj tarihi: Haziran 10, 2009 ne hata döndürdüğünü yazarsan daha faydalı olur aslında. ya da debug yaparsan, o anki durum bildirirsen falan.
Mirage Mesaj tarihi: Haziran 10, 2009 Mesaj tarihi: Haziran 10, 2009 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. ;)
aktiftablet Mesaj tarihi: Haziran 10, 2009 Mesaj tarihi: Haziran 10, 2009 Thread.sleep() yerine timer sınıfını kullan. Designer ekranında toolboxda var, ordan sürükleyrek bir timer oluşturabilirsin.
Devilmanta Mesaj tarihi: Haziran 11, 2009 Konuyu açan Mesaj tarihi: Haziran 11, 2009 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.
Devilmanta Mesaj tarihi: Haziran 11, 2009 Konuyu açan Mesaj tarihi: Haziran 11, 2009 aktiftablet said: Thread.sleep() yerine timer sınıfını kullan. Designer ekranında toolboxda var, ordan sürükleyrek bir timer oluşturabilirsin. Teşekkür ederim ayrıca bu daha kullanışlıymış.
Öne çıkan mesajlar