Название: [решено] Непонятное поведение при движени
Отправлено: iks от Ноябрь 21, 2011, 22:05
Есть вот такой класс #include "myscene.h" #include "../math/mymath.h" #include <QtCore/QTimer> #include <QtGui/QGraphicsEllipseItem>
myScene::myScene() { mathMy = new myMath;
/// раскидаем кометы int numKom = 20; for(int i=0; i<numKom; i++) { _rg = rand()%150+70; float toX=rand()%470+15.0, toY=rand()%470+15.0; item = this->addEllipse(toX, toY, 10, 10, QPen(Qt::NoPen), QBrush(QColor(_rg, _rg, 50))); lst_RG << _rg; /// R
lstX << toX; /// точная координата x lstY << toY; /// точная координата y /// высчитаем единицу перемещения для x и y int _ugol = rand()%45; int _y = 510.0 * tan(QString::number(_ugol * M_PI / 180).toDouble()); float _X = 510.0/mathMy->lengthLine(0,0, 510,_y); /// mathMy->lengthLine(x1,x2, y1,y2) возращает длину вектора sqrt(pow((x2-x1),2)+pow((y2-y1),2)); float _Y = _y/510.0;
if (i < numKom/8) { toX=_Y-_Y*2; toY=_X-_X*2.0; } /// направление полета вверх-лево else if (i < numKom/8*2) { toX=_Y; toY=_X-_X*2.0; } /// --- вверх-право else if (i < numKom/8*3) { toX=_X; toY=_Y-_Y*2.0; } /// --- право-вверх else if (i < numKom/8*4) { toX=_X; toY=_Y; } /// --- право-низ else if (i < numKom/8*5) { toX=_Y; toY=_X; } /// --- низ-право else if (i < numKom/8*6) { toX=_Y-_Y*2.0; toY=_X; } /// --- низ-лево else if (i < numKom/8*7) { toX=_X-_X*2.0; toY=_Y; } /// --- лево-низ else { toX=_X-_X*2; toY=_Y-_Y*2; } /// --- лево-вверх lstToX << toX*4.0; /// единица перемещения по x lstToY << toY*4.0; /// единица перемещения по y
lstEl << item; }
/// запустим таймер на 0.42 сек. что приблизительно равно 24 кадра в секунду QTimer *timer = new QTimer; connect(timer, SIGNAL(timeout()), this, SLOT(polet())); timer->start(42);
return; }
/// полет комет void myScene::polet() { for(int i=0; i<lstEl.count(); i++) { float xX = lstX.at(i)+lstToX.at(i); float yY = lstY.at(i)+lstToY.at(i);
if(xX < -10) xX = 500; else if(xX > 500) xX = -10; if(yY < -10) yY = 500; else if(yY > 500) yY = -10;
lstEl.at(i)->setPos( xX, yY ); lstX[i] = xX; lstY[i] = yY; }
Я его подрезал, оставил только проблемотичный код, вообще на этот таймер повещена работа более 1000 item, но вопрос не в этом. Именно эти item появляются не скраев и исчезают тоже не с краю, а вот где глюк понять не могу. Короче летают как им угодно, а нет так как положено =) Окно размером 500x500
Название: Re: Непонятное поведение дижущихся объекто
Отправлено: iks от Ноябрь 22, 2011, 10:03
Отвечу сам себе. Изменив место создания объекта на координаты x=0 y=0 и после этого переместив его на рандомно выбранную координату, он нормально начинает себя вести, то есть получается что начальная координата при рождении объекта играет свою роль. Приведу исправленный кусок кода item = this->addEllipse(0, 0, 10, 10, QPen(Qt::NoPen), QBrush(QColor(_rg, _rg, 50))); item->setPos( toX, toY );
|