Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > ДВИЖЕНИЕ ОБЬЕКТОВ


Автор: Grizzzli 15.5.2009, 22:29
Ребята, помогите пожалуйста с движением в С++
Вообщем, ситуация  такая: есть 4 картинки надо; заставить их двигаться,сделать это с помшью классов.  

Код

//A
setlinestyle(0,0,3);
setcolor(15);
setfillstyle(1,15);
line (50,50,90,50);
line(70,20,70,50);
circle(70,62,10);
floodfill(70,63,15);

//B
setlinestyle(0,0,3);
setcolor(15);
setfillstyle(1,15);
line (100,50,140,50);
line(120,50,120,70);
circle(120,80,10);
floodfill(120,80,15);
//C

setlinestyle(0,0,3);
setcolor(15);
setfillstyle(1,15);
line(200,50,260,50);
line(210,40,210,60);
line(250,40,250,60);
circle(230,60,8);
floodfill(230,60,15);

//D
setlinestyle(0,0,3);
setcolor(15);
setfillstyle(1,15);
circle(330,80,10);
floodfill(330,85,15);
line(300,50,330,80);
line(330,80,360,50);
line(250,40,250,60);



Автор: mes 15.5.2009, 23:00
Ну так создаете 4 класса, объекты которых могут отрисовывать себя относительно указанной им точки.
Создаете 4 объекта, и в цикле отрисовываете их (стирая перед этим старое), меняя им их относительные координаты.
Успехов  smile 

P.S. и не надо кричать (именно как крик воспринимается текст из заглавных букв), Вы этим только уменьшаете шансы на помощь Вам.
P.S.S. и это не тот раздел, где за Вас будут писать полностью прогу, если Вы не хотите прикладывать своих усилий, то Вам в центр помощи: http://forum.vingrad.ru/forum/Vingrad-help-center.html


Автор: Grizzzli 15.5.2009, 23:24
спасибо за совет!

Автор: kamre 16.5.2009, 10:07
Вот, вроде двигаются:
user posted image

Код

#ifndef SCENE_H
#define SCENE_H

#include <QGraphicsScene>
#include <QList>

class QGraphicsItemGroup;

class Scene: public QGraphicsScene {
    Q_OBJECT
public:
    Scene();
public slots:
    void animate();
private:
    QList<QGraphicsItemGroup*> groups;
};

#endif // SCENE_H

Код

#include "scene.h"

#include <math.h>

#include <QGraphicsItem>

Scene::Scene()
: QGraphicsScene(0)
{
    setBackgroundBrush(QBrush(Qt::black));
    QBrush brush(Qt::white);
    QPen pen(brush, 3);
    QList<QGraphicsItem*> items;
    // A
    items << addLine(50, 50, 90, 50, pen)
          << addLine(70, 20, 70, 50, pen)
          << addEllipse(70 - 10, 62 - 10, 20, 20, pen, brush);
    groups << createItemGroup(items);
    // B
    items.clear();
    items << addLine(100, 50, 140, 50, pen)
          << addLine(120, 50, 120, 70, pen)
          << addEllipse(120 - 10, 60 - 10, 20, 20, pen, brush);
    groups << createItemGroup(items);
    // C
    items.clear();
    items << addLine(200, 50, 260, 50, pen)
          << addLine(210, 40, 210, 60, pen)
          << addLine(250, 40, 250, 60, pen)
          << addEllipse(230 - 8, 60 - 8, 16, 16, pen, brush);
    groups << createItemGroup(items);
    // D
    items.clear();
    items << addLine(300, 50, 330, 80, pen)
          << addLine(330, 80, 360, 50, pen)
          << addLine(330, 80, 330, 50, pen)
          << addEllipse(330 - 10, 80 - 10, 20, 20, pen, brush);
    groups << createItemGroup(items);
}

double drand()
{
    return (double)rand()/(double)RAND_MAX;
}

void Scene::animate()
{
    qreal stepSize = 5.0;
    foreach(QGraphicsItemGroup *group, groups) {
        group->translate(drand()*stepSize - 0.5*stepSize, drand()*stepSize - 0.5*stepSize);
    }
}

Код

#include <QApplication>
#include <QGraphicsView>
#include <QTimer>

#include "scene.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Scene *scene = new Scene();
    QGraphicsView *view = new QGraphicsView(scene);
    view->setRenderHint(QPainter::Antialiasing, true);
    view->resize(400, 300);
    view->show();
    QTimer timer;
    QObject::connect(&timer, SIGNAL(timeout()), scene, SLOT(animate()));
    timer.setInterval(30);
    timer.start();
    return a.exec();
}

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