PDA

Просмотр полной версии : Реализация конвейера.


swfSlavik
12.10.2006, 14:34
Помогити реализовать конвеер (програмно). Тоесть, есть конвеер, нарисованый, на нем лента передвигаеться уже, надо чтобы там появлялся кубик и передвигался вместе с лентой до края конвеера и останавливался, потом следующий и т.д. пока ковеер не заполниться. Может есть какие-то идеи или может что-то подобное уже обсуждалось.

Хемуль
12.10.2006, 14:39
2 swfSlavik:
Вы бы нарисовали это лучше... А то кубик... Кубик - это трёхмерная фигура. Можно ведь подумать, что вам нужен алгоритм отрисовки куба с перспективой... Лучше оперировать таким понятием, как мувиклип, если спрашивате про что-то простое.
Вопросы:
- Кубики одинакового размера?
- Кубики накапливаются в конце конвеера, юуто им мешает дальше двигаться стенка?
- На конвеере может находиться кроме "сбившихся" кубиков только один движущийся кубик или сразу несколько движущихся?

swfSlavik
12.10.2006, 14:50
Сори.
Да там мувики передвигаются по конвееру, они разной формы/размера.
Они накапливаються, будто им мешает стенка.
Кроме "збившихся" и движущего может быть еще, но это не принципиально.
Коневеер нарисован, а мувики как бы отдельные обекты, которыми можна оперировать: брать с конвеера, передвигать и т.д
Спасибо за подержку темы.

swfSlavik
12.10.2006, 17:32
ну так как? Никто не может помочь. :( Придеться делать самому.

etc
12.10.2006, 17:34
Придеться делать самому.
Тогда вы просто ошиблись разделом.

Хемуль
12.10.2006, 17:35
ну так как? Никто не может помочь. :( Придеться делать самому.
Не ждите помощи в течение пары часов. Я, например, сейчас на работе. Иногда могу выделить время, иногда - нет. Сейчас не могу, потому как клиенты намекнули, что хотят поправки на сайте видеть до конца недели...

swfSlavik
12.10.2006, 18:13
2 _etc: Может и ошибся, а может просто постеснялся писать в других разделах.

2 All: Мне хотя бы идею, не надо код приводить.

Хемуль
12.10.2006, 18:23
2 swfSlavik:
Хорошо... На onEnterFrame сцены двигаете мувиклипы. Мувиклипы двигаются до определённой "стенки". Для каждого мувиклипа проверяется в onEnterFrame координата. Если он достиг стенки, останавливается и стенкой становится уже координата стенки + ширина этого достигшего стенки мувиклипа.

swfSlavik
12.10.2006, 18:30
Пасиба за идею!
2 swfSlavik:
Для каждого мувиклипа проверяется в onEnterFrame координата. Если он достиг стенки, останавливается и стенкой становится уже координата стенки + ширина этого достигшего стенки мувиклипа.

Так получилось что никогда не обробатывал событе onEnterFrame, оно вызываеться переодически, типа онТаймер?

Хемуль
12.10.2006, 18:42
2 swfSlavik:
Каждый кадр...

D12
12.10.2006, 22:44
2swfSlavik
можно уточнить , вид сбоку или изометрия , и какие варианты фигур ?

Хемуль
13.10.2006, 00:18
2 D12:
Просто мувиклипы... Никакой изометрии.

D12
13.10.2006, 00:55
Просто мувиклипы... Никакой изометрии.
Форма обьектов какая ?
Какие типы форм , или один квадратик только ?

Хемуль
13.10.2006, 02:31
2 D12:
Да я как понял, просто мувиклипы сбиваются в кучу. Bounding Box'ы только проверять надо. То есть, прямоугольники ограничивающие. ^_^

2 swfSlavik:
Просто вставить в кадр таймлайна:

var conveyorBegin:Number = 20;
var conveyorEnd:Number = 400;
var conveyorY:Number = 100;
var conveyorSpeed:Number = -1;
var objectMinSize:Number = 10;
var objectMaxSize:Number = 30;
var objectBaseName:String = "obj";
var objectsTimeInterval:Number = 2000;
var objects:Array = new Array();

var timer = setInterval(this, "addObject", objectsTimeInterval);

this.onEnterFrame = function()
{
var objectsNumber:Number = objects.length;
for (var index:Number = 0; index < objectsNumber; index++)
{
var currentObject:MovieClip = objects[index];
if (currentObject.moving)
{
currentObject._x += conveyorSpeed;
if (currentObject._x < conveyorBegin)
{
currentObject._x = conveyorBegin;
conveyorBegin += currentObject._width;
currentObject.moving = false;
}

}
}
}

function addObject()
{
var newObjectName:String = objectBaseName + objects.length;
var newObjectSize:Number = randRange(objectMinSize, objectMaxSize);
var newObject:MovieClip = createRectangleMovieClip(newObjectName, this, this.getNextHighestDepth(), conveyorEnd, conveyorY - newObjectSize, newObjectSize, newObjectSize, 0x666666, 100);
newObject.moving = true;
objects.push(newObject);
}

function randRange(min:Number, max:Number):Number
{
var randomNum:Number = Math.round(Math.random() * (max - min)) + min;
return randomNum;
}

function createRectangleMovieClip(newName:String, parentClip:MovieClip, parentClipDepth:Number, newX:Number, newY:Number, newWidth:Number, newHeight:Number, newColor:Number, newAlpha:Number):MovieClip
{
var newClip:MovieClip = parentClip.createEmptyMovieClip(newName, parentClipDepth);
newClip.beginFill(newColor);
newClip.moveTo(0, 0);
newClip.lineTo(newWidth, 0);
newClip.lineTo(newWidth, newHeight);
newClip.lineTo(0, newHeight);
newClip.lineTo(0, 0);
newClip.endFill();
newClip._x = newX;
newClip._y = newY;
newClip._alpha = newAlpha;
return newClip;
}

Начальная, конечная точки конвеера, его положение по вертикали и скорость задаются.
Исходник прикрепляю...

D12
14.10.2006, 01:06
Эээ ... получается мне тоже нужно отвечать ? =)

Мой вариант :
finith = 50
stena = finith;
time = 0;
i = 1;
////
this.onEnterFrame = function() {
time += 1;
if (time == 90) {
i += 1;
time = 0;
//
graniWidth = 15+int(Math.random()*20);
graniHeigth = 15+int(Math.random()*20);
//
this.createEmptyMovieClip("box"+i, i);
with (this["box"+i]) {
lineStyle(1, 0xFFFFFF, 50);
beginFill(0x6633CC, 20);
moveTo(-15, -graniHeigth);
lineTo(graniWidth, -graniHeigth);
lineTo(graniWidth, 15);
lineTo(-15, 15);
lineTo(-15, -15);
endFill();
}
this["box"+i]._x = 450;
this["box"+i]._y = 150;


}
///
this["box"+i].onEnterFrame = function() {
this._x -= 1;
if (this._x<_root.stena) {
_root.stena += this._width;
delete this.onEnterFrame;
}
};
if (((450-finith)-(_root.stena))<this["box"+i]._width) {
delete this.onEnterFrame;
}
};