Множество обекти на Breakout в една кутия с картини

Създавам програма, която симулира тази на играта Breakout, използвайки C#.

Научавам различни техники за това как да създам тухли, гребло и топка за играта, но не мога да разбера как да ги добавя всичките в едно поле за картина във Visual Studio.

Основният проблем, с който се сблъсквам, е, че за да преместя топката например, трябва да изчистя „платното“, като използвам следната част от кода: paper.Clear(Color.White); Това основно изчиства полето на картината до бял цвят, за да може новото координата (на топката например) да бъде зората в полето за картина и тук започва моят проблем.

Всеки от компонентите в играта Breakout (която съм практикувал) използва кода paper.Clear(Color.White);. Това означава, че ако например искам да преместя греблото, да покажа тухлите и да отскоча топката едновременно, програмата просто решава да изпълнява една функция наведнъж. Ако премахна paper.Clear(Color.White); от един от моите активи, тогава програмата просто няма да функционира по начина, по който искам.

Има ли начин всички тези компоненти да работят едновременно в играта, без да пропуснете някой от тях напълно?


person Community    schedule 13.11.2014    source източник


Отговори (1)


Най-просто трябва да промените подхода си, за да накарате „оформлението“ или „рисуването“ да се контролират централно, вероятно на таймер или подобно, и да направите една операция „изчистване“ и след това да преначертаете всичките си компоненти. С други думи, не карайте всеки компонент да изчиства платното, те просто трябва да се занимават със собственото си изобразяване.

Горното е най-простият подход. Освен това можете да възприемете подход само за преначертаване на това, което се е променило от един кадър в друг. Това може да направи много по-оптимизирана производителност, особено ако платното на вашата игра е голямо или има много компоненти. Въпреки това изисква напълно различен и в някои отношения по-сложен дизайн. Ще трябва да определите правоъгълника/правоъгълниците, които са имали „движение” или други модификации спрямо предишния кадър, да изчистите само тези правоъгълници и да помолите компонентите, които са изцяло или частично в тези правоъгълници, да се начертаят отново.

person user469104    schedule 13.11.2014
comment
Благодаря за отговора! По-разумно е да направите едно изчистване в таймера, а не за всеки компонент. Ще го пробвам и ще видя как ще се справя. - person ; 13.11.2014