Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Timer - очень глючит


Автор: glebast 13.6.2013, 18:00
Доброго времени суток.

В С# я только новичек.
Так вот, я хочу создать типо игру гоночки. У меня картинки по форме передвигаються сверху вниз (препятсвия) и плюс дорога и все это в одном таймере. так вот в чем прикол, это все дело очень тормозит, т.е. когда только одна картинка обрабатывается в таймере, то все норм. а с каждой добавленной картинкой все глюченей.

Может подскажите какие есть альтернативы таймеру, или с таймером что-то можно сделать.

Код

private void timer1_Tick(object sender, EventArgs e)
        {
            bots.Go();
            road.Go();
            
 
            for (int i = 0; i < 3; i++)
            {
                if (((bots.bot[i].Top + bots.bot[i].Height -5) >= maincar.car.Top) &
                        (bots.bot[i].Top <= (maincar.car.Top + maincar.image1.Height)) &
                        ((bots.bot[i].Left + bots.bot[i].Width) >= maincar.car.Left + maincar.image1.Width - 10) &
                        (bots.bot[i].Left <= (maincar.car.Left + maincar.image1.Width + 10)))
                    timer1.Enabled = false;
            }
         
        }


Код

public void Go()
        {
            for (int i = 0; i < 2; i++)
            {
                bot[i].Top += 15;
                if (bot[i].Top > Screen.PrimaryScreen.Bounds.Height) { bot[i].Left = r.Next(110) + 290; bot[i].Top = -bot[i].Height; }
            }
 
            bot[2].Top += 5;
            if (bot[2].Top > Screen.PrimaryScreen.Bounds.Height) { bot[2].Left = r.Next(80) + 400; bot[2].Top = -bot[2].Height; }
            
        }

Автор: AntonX 14.6.2013, 08:07
Никаких. рендер картинки лучше делать в фоновом потоке а потом отображать в основном только результат. В идеале рендерить лучше через видеокарту или на худой конец на ЦП но без испльзования визуальных компонентов.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51b9df2d6ccc197f2a000002#findElement_E7045_51baa5256ccc196d020023ba_0

Автор: Fobos 15.6.2013, 09:38
Я не особо вникал в суть, но не проще ли на XNA это написать чем на pure C#

Автор: gambit 15.6.2013, 14:29
Fobos, вот лучше иногда вникнуть в суть, и прочитать, что человек делает первые шаги в шарпе, и придумал себе интересную задачу для закрепления основ, при чем тут xna непонятно.

Автор: Fobos 15.6.2013, 17:07
Хм, телепаты на форуме, откуда Вы можете знать что человеку надо? Я ему предложил альтернативу изучения шарпа - XNA, там он сможет писать. Там он может писать игру отвлекаясь гораздо меньше на элементы платформы. Ведь в дотнете как вы наверное слышали есть как минимум три класса таймера, новичок должен понять в чем разница, потом он должен следить за памятью - ведь с таймерами можно как-нибудь мемори лики получить. Плюс исключения в асинхронном потоке могут валить приложение внезапно, для новичка это будет очень сложно. А в XNA он писать свою игру и радоваться жизни(по крайней мере там будет меньший порог вхождения). 

Суть моего предложения - в XNA у него не будет ручного таймера для обновления приложения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)