Witam
Napisałem następną grę 2D w Qt Creatorze w C++. Możecie ją obejrzeć na youtube
Kod jest tutaj
https://github.com/bandytaczasu/MouseCar/tree/master
Spoko, tylko dzwięk straszy.
nie mam czasu analizować teraz kodu ale parę rzeczy od razu rzuca się w oczy: W niektórych plikach pełno komentarzy ba jeden plik to prawie w większości wy komentowany kod, potrzebny refactor, miejscami długaśne funkcje/konstruktory, widzę pokomentowane delete(qt parent-children), puste destruktory. zapoznaj się z https://github.com/KDE/clazy . No i widzę użycie plików .ui nie widzę potrzeby.
ale ogólnie fajnie jak na projekcik jako pomysł do napisania i zapoznania się właśnie z qt.
Dodaj jakichś ludzi do rozjeżdżania.
Dopasuj wielkość auta to ulicy.
takie micromachines w wersji wczesnej alpha
fajne, ale do miana gry to chyba jeszcze daleko
@revcorey: Dzięki za opinię.
potrzebny refactor
Ja bym to zostawił i zaczął pisać kolejną grę ;) @ŁukaszS fajny projekt, wszystko działa, jest co pokazać, jeśli udało Ci się zrobić taką grę jaką zamierzałeś na początku to gratuluję.
Jeśli chodzi o jakieś konstruktywne komentarze, to może postaraj się w przyszłości nadawać swoim typom znaczące, konkretne nazwy. Weźmy naprzykład taki MyRect
. Nazwa sama w sobie nie za wiele znaczy, a jest tam ukryte całkiem sporo logiki. Tworzysz jego instancję by obsłużyć logikę samochodu oraz by....ustawić tło. Nie jest to zbyt czytelna separacja. Jakbyś od początku nazwał ten typ MyCar
to najpewniej nie próbowałbyś go potem użyć do obsługi tła, ale stworzyłbyś osobny typ, albo użył prostej funkcji co w tym przypadku byłoby chyba bardziej wskazane.
Jakbyś osiągnął taką separację, to skracanie kodu niektórych konstruktorów będzie bardziej naturalnie. Naprzykład konstruktor MyScene
i ten fragment
// ....
QScrollArea scrollArea;
MyRect *rect = new MyRect();
this->addItem(rect);
// rect->setPos(480, 480);
rect->setPos(100, 100);
rect->setFlag(QGraphicsItem::ItemIsMovable, true);
// rect->setRotation(rect->initAngle-30);
rect->currentAngle = rect->rotation();
rect->posX = rect->pos().x();
rect->posY = rect->pos().y();
rect->rotatingWithMouse();
const QRectF &newRect = QRectF();
rect->ensureVisible(newRect, 5000, 5000);
QBrush brush;
const QColor rectColor = Qt::transparent;
//...
I teraz jakbyś miał odseparowany MyCar
zamiast MyRect
do wszystkiego, mógłbyś stworzyć w nim taki kontruktor (this
jest zbędny ale tak łatwiej było mi edytować)
MyCar::MyCar(int posX, int posY)
{
this->setPos(posX, posY);
this->setFlag(QGraphicsItem::ItemIsMovable, true);
// this->setRotation(this->initAngle-30);
this->currentAngle = this->rotation();
this->posX = this->pos().x();
this->posY = this->pos().y();
this->rotatingWithMouse();
const QRectF &newRect = QRectF();
this->ensureVisible(newRect, 5000, 5000);
}
Tym samym ten wybrany fragment MyScene
skróciłby się do takiej postaci
// ....
QScrollArea scrollArea;
MyCar *car = new MyCar(100, 100);
this->addItem(car);
QBrush brush;
const QColor rectColor = Qt::transparent;
//...