将等距的精灵包裹起来以保持距离

时间:2011-07-16 22:01:32

标签: language-agnostic

我有一组固定的9个等距对象。当他们从屏幕右边缘经过时,它们会向左边的屏幕滚动。

当object0.x到达屏幕的右边缘(720或1280)时,它需要包裹在object9的左边,这可能是左边的屏幕,并保持与object9的距离,同样对于其他精灵来说离开屏幕,他们需要包裹到相反的维持前一个对象之间的距离。当向相反方向移动时,当然也必须如此。

目前,事情正在变得越来越糟糕。

这是我当前的代码:( 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 :(得分:0)

好的,我所做的是将计算基于屏幕上的对象数量和屏幕宽度的子集 - 实际显示的区域而不是屏幕宽度本身。这似乎有效,但由于所有内容都是硬编码的,感觉就像是一个“黑客”而不是解决方案,这对于任意显示宽度和任意对象宽度来说都是一个公式,但问题是针对即时情况解决的。

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)