Есть вот такой класс
#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