【问题标题】:wrap equadistant sprites to screen maintaining distance将等距精灵包裹到屏幕保持距离
【发布时间】:2011-07-16 22:01:31
【问题描述】:

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

【问题讨论】:

    标签: language-agnostic


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      相关资源
      最近更新 更多