Jump to: navigation, search

Information about the group Translation of the wiki page Development/Tutorials/Qt4 Ruby Tutorial/Chapter 11.
Development/Tutorials/Qt4 Ruby Tutorial/Chapter 11Current message text
...Chapter 11/Page display title/ruРазработка/Руководства/Введение в Qt4 на Ruby/Глава 11
...t4 Ruby Tutorial/Chapter 11/1/ruTutorialBrowser/ru
...t4 Ruby Tutorial/Chapter 11/2/ruВведение в программирование на Qt<sup>®</sup>4 на языке Ruby
...t4 Ruby Tutorial/Chapter 11/3/ruПробный выстрел
...t4 Ruby Tutorial/Chapter 11/4/ruПример 10: Гладкий как шёлк
...t4 Ruby Tutorial/Chapter 11/5/ruПример 12: Висящий в воздухе
...t4 Ruby Tutorial/Chapter 11/6/ru== Пробный выстрел ==
...t4 Ruby Tutorial/Chapter 11/7/ru[[Image:Qt4_Ruby_Tutorial_Screenshot_11.png|center]]
...t4 Ruby Tutorial/Chapter 11/8/ruФайлы:
...t4 Ruby Tutorial/Chapter 11/9/ru=== Обзор ===
...4 Ruby Tutorial/Chapter 11/10/ruIn this example we introduce a timer to implement animated shooting.
...4 Ruby Tutorial/Chapter 11/11/ru=== Построчный обзор программы ===
...4 Ruby Tutorial/Chapter 11/12/ruThe '''<tt>CannonField</tt>''' now has shooting capabilities.
...4 Ruby Tutorial/Chapter 11/13/ruWe include '''<tt>Math</tt>''' because we need the '''<tt>sin()</tt>''' and '''<tt>cos()</tt>''' functions.
...4 Ruby Tutorial/Chapter 11/14/ruWe initialize our new private variables and connect the [ Qt::Timer::timeout()] signal to our '''<tt>moveShot()</tt>''' slot. We'll move the shot every time the timer times out.
...4 Ruby Tutorial/Chapter 11/15/ruThe '''<tt>timerCount</tt>''' keeps track of the time passed since the shot was fired. The '''<tt>shootAngle</tt>''' is the cannon angle and '''<tt>shootForce</tt>''' is the cannon force when the shot was fired.
...4 Ruby Tutorial/Chapter 11/16/ruThis function shoots a shot unless a shot is in the air. The '''<tt>timerCount</tt>''' is reset to zero. The '''<tt>shootAngle</tt>''' and '''<tt>shootForce</tt>''' variables are set to the current cannon angle and force. Finally, we start the timer.
...4 Ruby Tutorial/Chapter 11/17/ru'''<tt>moveShot()</tt>''' is the slot that moves the shot, called every 5 milliseconds when the [ Qt::Timer] fires.
...4 Ruby Tutorial/Chapter 11/18/ruIts tasks are to compute the new position, update the screen with the shot in the new position, and if necessary, stop the timer.
...4 Ruby Tutorial/Chapter 11/19/ruFirst we make a [ Qt::Region] that holds the old '''<tt>shotRect()</tt>'''. A [ Qt::Region] is capable of holding any sort of region, and we'll use it here to simplify the painting. '''<tt>shotRect()</tt>''' returns the rectangle where the shot is now. It is explained in detail later.
...4 Ruby Tutorial/Chapter 11/20/ruThen we increment the '''<tt>timerCount</tt>''', which has the effect of moving the shot one step along its trajectory.
...4 Ruby Tutorial/Chapter 11/21/ruNext we fetch the new shot rectangle.
...4 Ruby Tutorial/Chapter 11/22/ruIf the shot has moved beyond the right or bottom edge of the widget we stop the timer, or we add the new '''<tt>shotRect()</tt>''' to the [ Qt::Region].
...4 Ruby Tutorial/Chapter 11/23/ruFinally, we repaint the [ Qt::Region]. This will send a single paint event for just the one or two rectangles that need updating.
...4 Ruby Tutorial/Chapter 11/24/ruThe paint event function has been simplified since the previous chapter. Most of the logic has been moved to the new '''<tt>paintShot()</tt>''' and '''<tt>paintCannon()</tt>''' functions.
...4 Ruby Tutorial/Chapter 11/25/ruThis private function paints the shot by drawing a black filled rectangle.
...4 Ruby Tutorial/Chapter 11/26/ruWe leave out the implementation of '''<tt>paintCannon()</tt>'''; it is the same as the [ Qt::Widget::paintEvent()] reimplementation from the previous chapter.
...4 Ruby Tutorial/Chapter 11/27/ruThis private function calculates the center point of the shot and returns the enclosing rectangle of the shot. It uses the initial cannon force and angle in addition to '''<tt>timerCount</tt>''', which increases as time passes.
...4 Ruby Tutorial/Chapter 11/28/ruThe formula used is the standard Newtonian formula for frictionless movement in a gravity field. For simplicity, we've chosen to disregard any Einsteinian effects.
...4 Ruby Tutorial/Chapter 11/29/ruWe calculate the center point in a coordinate system where y coordinates increase upward. After we have calculated the center point, we construct a [ Qt::Rect] with size 6 x 6 and move its center point to the point calculated above. In the same operation we convert the point into the widget's coordinate system (see [ The Coordinate System]).
...4 Ruby Tutorial/Chapter 11/30/ruThe only addition is the <strong>Shoot</strong> button.
...4 Ruby Tutorial/Chapter 11/31/ruIn the constructor we create and set up the <strong>Shoot</strong> button exactly like we did with the <strong>Quit</strong> button.
...4 Ruby Tutorial/Chapter 11/32/ruConnects the '''<tt>clicked()</tt>''' signal of the <strong>Shoot</strong> button to the '''<tt>shoot()</tt>''' slot of the '''<tt>CannonField</tt>'''.
...4 Ruby Tutorial/Chapter 11/33/ru=== Запуск приложения ===
...4 Ruby Tutorial/Chapter 11/34/ruThe cannon can shoot, but there's nothing to shoot at.
...4 Ruby Tutorial/Chapter 11/35/ru=== Упражнения ===
...4 Ruby Tutorial/Chapter 11/36/ruMake the shot a filled circle. [Hint: [ Qt::Painter::drawEllipse()] may help.]
...4 Ruby Tutorial/Chapter 11/37/ruChange the color of the cannon when a shot is in the air.
...4 Ruby Tutorial/Chapter 11/38/ru[[Category:Ruby/ru]]
NavigationShowing 39 messages.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V.Legal