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; } }
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; } }