Оберните эквидистантные спрайты в экран, сохраняя расстояние - PullRequest
0 голосов
/ 17 июля 2011

У меня есть фиксированный набор из 9 объектов, которые равноудалены.Когда они выходят за правый край экрана, они переходят на левый экран.

, когда object0.x попадает в правый край экрана (720 или 1280), он должен обернуться слева от объекта9, который, вероятно, находится за экраном слева, и сохранить расстояние от объекта9, аналогично для другихспрайты, когда они уходят с экрана, их нужно перенести на противоположное поддерживающее расстояние между предыдущим объектом.То же самое, конечно, должно быть верно при движении в противоположном направлении.

В настоящее время все оборачивается и выходит из позиции.

Вот мой текущий код: (getstartpos () благодаря petar-ivanov )

function getstartpos(objectWidth as integer, startPosition as integer, objectNumber as integer, space as integer)

return startPosition + objectNumber * (objectWidth + space)

end function

sub screenupdate()

m.p0x=m.p0x+ int(m.inc)

if m.p0x > 720
    m.p0x   = -getstartpos(120,m.p9x,9,20)
    ?m.p0x
endif

m.p0.MoveTo(m.p0x, m.p0y)

m.p1x = m.p1x + int(m.inc)

if m.p1x > 720
    m.p1x   = -getstartpos(120,m.p0x,0,20)
    ?m.p1x
endif

m.p1.MoveTo(m.p1x, m.p1y)

m.p2x = m.p2x + int(m.inc)

if m.p2x > 720
    m.p2x   = -getstartpos(120,m.p1x,1,20)
    ?m.p2x
endif

m.p2.MoveTo(m.p2x, m.p2y)

...

m.p9x = m.p9x + int(m.inc)  
    if m.p9x > 720
    m.p9x   = -getstartpos(120,m.p8x,8,20)
    ?m.p9x
endif
m.p9.MoveTo(m.p9x, m.p9y)   
end sub

1 Ответ

0 голосов
/ 17 июля 2011

Хорошо, я сделал так, чтобы расчеты основывались на количестве объектов на экране и подмножестве ширины экрана - фактической отображаемой области, а не на самой ширине экрана. Кажется, это работает, но, поскольку все жестко закодировано, это похоже на «взлом» вместо решения, которое будет формулой для этого при любой произвольной ширине экрана и произвольной ширине объекта, но проблема решается для немедленной ситуации.

m.p0x=m.p0x+ int(m.inc)

if m.p0x > 650 then
    m.p0x   = (m.p5x -125)
    ?"m.p0x moved to:";m.p0x
    ?m.p5x
    ?"difference: ";m.p5x -m.p0x
endif

m.p0.MoveTo(m.p0x, m.p0y)

m.p1x = m.p1x + int(m.inc)

if m.p1x > 650
    m.p1x   = m.p0x-125
endif

m.p1.MoveTo(m.p1x, m.p1y)

m.p2x = m.p2x + int(m.inc)

if m.p2x > 650
    m.p2x   = m.p1x-125     
endif

m.p2.MoveTo(m.p2x, m.p2y)

m.p3x = m.p3x + int(m.inc)

if m.p3x > 650
    m.p3x   = m.p2x-125
endif
m.p3.MoveTo(m.p3x, m.p3y)


m.p4x=m.p4x+ int(m.inc)

if m.p4x > 650
    m.p4x   = m.p3x-125
endif

m.p4.MoveTo(m.p4x, m.p4y)

m.p5x = m.p5x + int(m.inc)

if m.p5x > 650
    m.p5x   =  m.p4x-125
endif

m.p5.MoveTo(m.p5x, m.p5y)

(etc up to m.p9)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...