Пример #1
0
            public void Update(BGArea area, float delta)
            {
                float leftvalue  = (area.pos.X + area.stepX) * layer.scrollspeed;
                float rightvalue = leftvalue + area.size.X;
                float scrolldec  = (layer.scrollspeed - 1);
                float newspeed   = 1 + scrolldec / 4;

                if (newspeed < 0)
                {
                    newspeed = 0;
                }
                float Y = area.scenepos.Y + area.drawoffect.Y + (-area.pos.Y + area.stepY) * newspeed;
                //删除
                List <BGBlock> del = new List <BGBlock>();

                foreach (var b in blocks)
                {
                    if (b.startstep + b.rect.Width < leftvalue - 350)
                    {
                        del.Add(b);
                    }
                }
                foreach (var b in del)
                {
                    blocks.Remove(b);
                }
                //移动
                List <SpriteAniController> anis = new List <SpriteAniController>();
                float maxright = leftvalue;

                foreach (var b in blocks)
                {
                    b.rect.Width  = b.ani.GetFrame().size.X;
                    b.rect.Height = (int)area.size.Y;
                    b.rect.X      = (int)(area.scenepos.X + area.drawoffect.X + (b.startstep - leftvalue));
                    b.rect.Y      = (int)Y;
                    maxright      = Math.Max(maxright, b.startstep + b.rect.Width);
                    if (anis.Contains(b.ani) == false)
                    {
                        anis.Add(b.ani);
                    }
                }
                foreach (var a in anis)
                {
                    a.AdvTime(delta);
                }
                //如果不够,再加上
                if (maxright < rightvalue)
                {
                    var b = layer.GetNext();
                    b.startstep = maxright;
                    blocks.Add(b);
                    b.rect.Width  = b.ani.GetFrame().size.X;
                    b.rect.Height = (int)area.size.Y;
                    b.rect.X      = (int)(area.scenepos.X + area.drawoffect.X + (b.startstep - leftvalue));
                    b.rect.Y      = (int)Y;
                }
            }
Пример #2
0
 public void Update(BGArea area,float delta)
 {
     float leftvalue = (area.pos.X + area.stepX) * layer.scrollspeed;
     float rightvalue = leftvalue + area.size.X;
     float scrolldec = (layer.scrollspeed - 1);
     float newspeed = 1 + scrolldec /4;
     if (newspeed < 0) newspeed = 0;
     float Y = area.scenepos.Y + area.drawoffect.Y + (-area.pos.Y + area.stepY) * newspeed;
     //删除
     List<BGBlock> del=new List<BGBlock>();
     foreach (var b in blocks)
     {
         if (b.startstep + b.rect.Width < leftvalue-350)
             del.Add(b);
     }
     foreach (var b in del)
     {
         blocks.Remove(b);
     }
     //移动
     List<SpriteAniController> anis = new List<SpriteAniController>();
     float maxright = leftvalue;
     foreach (var b in blocks)
     {
         b.rect.Width = b.ani.GetFrame().size.X;
         b.rect.Height = (int)area.size.Y;
         b.rect.X = (int)(area.scenepos.X + area.drawoffect.X+(b.startstep - leftvalue));
         b.rect.Y = (int)Y;
         maxright = Math.Max(maxright, b.startstep+b.rect.Width);
         if (anis.Contains(b.ani) == false)
         {
             anis.Add(b.ani);
         }
     }
     foreach (var a in anis)
     {
         a.AdvTime(delta);
     }
     //如果不够,再加上
     if (maxright < rightvalue)
     {
         var b = layer.GetNext();
         b.startstep = maxright;
         blocks.Add(b);
         b.rect.Width = b.ani.GetFrame().size.X;
         b.rect.Height = (int)area.size.Y;
         b.rect.X = (int)(area.scenepos.X + area.drawoffect .X+ (b.startstep - leftvalue));
         b.rect.Y = (int)Y;
     }
 }