我有一组固定的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
答案 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)