protected virtual void DoMessages(double elapsedTime) { foreach (CmpMessage msg in ComponentMessages) { //0号攻击判定 if (msg.Tag == CmpMessage.CollisionMasseageNormal) { CollisionMessages.CollisionMasseageNormal m = msg as CollisionMessages.CollisionMasseageNormal; if (attackMessageBox.AllowAttack[0]) { this.Direction.rotate(180); attackMessageBox.ClosePort(0); double x, y, x1, y1; x = Position.X; y = Position.Y; x1 = m.Position.X; y1 = m.Position.Y; Vector2D vct = new Vector2D(); vct.X = x - x1; vct.Y = y - y1; vct.Normalize(); this.Direction.X = vct.X; this.Direction.Y = vct.Y; } } } ComponentMessages.Clear(); }
public Direct_BlueKnife(TextureManager texturemanager, Vector2D direction) { bulletbody = new BlueKnife(texturemanager); direction.Normalize(); this.Direction.X = direction.X; this.Direction.Y = direction.Y; attack = 20; speed = 300; }
Sprite BlueEsc; //子弹消失时候的显示旋转蓝框 public ReimuBullet_Follow(TextureManager texturemanager, Vector2D direction) { bulletbody = new BlueCard(texturemanager); direction.Normalize(); this.Direction.X = direction.X; this.Direction.Y = direction.Y; attack = 100; speed = 400; BlueEsc = (new BlueBox(texturemanager)).GetSprite(); }
Sprite RedEsc; //子弹消失时候的显示旋转红符 public ReimuBullet_Dir(TextureManager texturemanager, Vector2D direction) { bulletbody = new RedCard(texturemanager); direction.Normalize(); this.Direction.X = direction.X; this.Direction.Y = direction.Y; attack = 100; speed = 800; RedEsc = (new RedBox(texturemanager)).GetSprite(); }
public override void Update(double elapsedTime) { base.Update(elapsedTime); double x = Datas.CurrentPlayer.Position.X; double y = Datas.CurrentPlayer.Position.Y; double dis = (Position.X - x) * (Position.X - x) + (Position.Y - y) * (Position.Y - y); if (dis < distance2) { Vector2D vct = new Vector2D(x - Position.X, y - Position.Y); vct.Normalize(); x = elapsedTime * vct.X * speed2; y = elapsedTime * vct.Y * speed2; x = Position.X + x; y = Position.Y + y; Position.X = x; Position.Y = y; } }
public override void Render(Renderer renderer) { //x,y是头的坐标位置,(以下是画出身体) float ag = 0; for (int i = bodycount - 1; i > 0; i--) { sprites[i].SetPosition(positions[i].X, positions[i].Y); //方向定义为指向前一个块 Vector2D vct = new Vector2D(positions[i].X - positions[i - 1].X, positions[i].Y - positions[i - 1].Y); //如果点没有发生变化,则跳过本次循环 if (vct.X == 0 && vct.Y == 0) { continue; } vct.Normalize(); ag = vct.getcurve(); renderer.DrawSprite(sprites[i], positions[i].X, positions[i].Y, ag + 90); } }
public override void Update(double elapsedTime, double x, double y) { _x = x; _y = y; multiSprite.Update(elapsedTime); multiSprites[1].Update(elapsedTime); effect.Update(elapsedTime); time_caculate += elapsedTime; if (l_x != _x || l_y != _y) { //向前移动一步 for (int i = positions.Length - 1; i > 0; i--) { Vector2D vct = new Vector2D(positions[i].X - positions[i - 1].X, positions[i].Y - positions[i - 1].Y); if (vct.X != 0 && vct.Y != 0) { vct.Normalize(); float dis = Vector2D.distance(positions[i], positions[i - 1]); //大于最大距离后加速 if (dis > max_distance) { speeds[i] = speeds[i - 1]; } //小于最小距离后减速 else if (dis < min_distance) { float percent = 0; percent = (float)i / (bodycount - 1); speeds[i] = speed - percent * speed * divide_percent; } positions[i].X -= vct.X * speeds[i] * (float)elapsedTime; positions[i].Y -= vct.Y * speeds[i] * (float)elapsedTime; } } positions[0].X = _x; positions[0].Y = _y; l_x = _x; l_y = _y; } }
public override void Render() { //for (int i = 1; i < dividecount; i++) //{ // Rays_sprites[i].SetPosition(positions[i].X, positions[i].Y); // //方向定义为指向前一个块 // Vector2D vct = new Vector2D(positions[i].X - positions[i - 1].X, // positions[i].Y - positions[i - 1].Y); // vct.Normalize(); // ag = vct.getcurve(); // Stage1State._renderer.DrawSprite(Rays_sprites[i], positions[i].X, positions[i].Y, ag + 90); //} float ag = 0; for (int i = ((int)dividecount - 1); i > 0; i--) { Rays_sprites[i].SetPosition(positions[i].X, positions[i].Y); //方向定义为指向前一个块 Vector2D vct = new Vector2D(positions[i].X - positions[i - 1].X, positions[i].Y - positions[i - 1].Y); //如果点没有发生变化,则跳过本次循环 if (vct.X == 0 && vct.Y == 0) { continue; } vct.Normalize(); ag = vct.getcurve(); double x = positions[i].X; double y = positions[i].Y; if (x < 200 && x > -200 && y > -10 && y < 450) { Stage1State._renderer.DrawSprite(Rays_sprites[i], (float)positions[i].X, (float)positions[i].Y, ag + 90); } } ag = Direction.getcurve(); Rays_sprites[0].SetPosition(positions[0].X, positions[0].Y); Stage1State._renderer.DrawSprite(Rays_sprites[0], (float)positions[0].X, (float)positions[0].Y, ag - 90); }
float _alpha; //那段时间的透明值 #endregion Fields #region Constructors public ReimuBullet_Dir(TextureManager texturemanager, Vector2D direction) { bulletbody = new RedCard(texturemanager); direction.Normalize(); this.Direction.X = direction.X; this.Direction.Y = direction.Y; attack = 100; speed = 800; RedEsc = (new RedBox(texturemanager)).GetSprite(); }
public override void Update(double elapsedTime) { base.Update(elapsedTime); double x= Datas.CurrentPlayer.Position.X; double y = Datas.CurrentPlayer.Position.Y; double dis = (Position.X - x) * (Position.X - x) + (Position.Y - y) * (Position.Y - y); if (dis < distance2) { Vector2D vct = new Vector2D(x - Position.X, y - Position.Y); vct.Normalize(); x = elapsedTime * vct.X * speed2; y = elapsedTime * vct.Y * speed2; x = Position.X + x; y = Position.Y + y; Position.X = x; Position.Y = y; } }
public Direct_BlueKnife(TextureManager texturemanager , Vector2D direction) { bulletbody = new BlueKnife(texturemanager); direction.Normalize(); this.Direction.X = direction.X; this.Direction.Y = direction.Y; attack = 20; speed = 300; }
protected virtual void DoMessages(double elapsedTime) { foreach (CmpMessage msg in ComponentMessages) { //0号攻击判定 if (msg.Tag == CmpMessage.CollisionMasseageNormal) { CollisionMessages.CollisionMasseageNormal m = msg as CollisionMessages.CollisionMasseageNormal; if (attackMessageBox.AllowAttack[0]) { this.Direction.rotate(180); attackMessageBox.ClosePort(0); double x, y,x1,y1; x = Position.X; y = Position.Y; x1 = m.Position.X; y1 = m.Position.Y; Vector2D vct = new Vector2D(); vct.X = x-x1; vct.Y = y-y1; vct.Normalize(); this.Direction.X = vct.X; this.Direction.Y = vct.Y; } } } ComponentMessages.Clear(); }
public override void Update(double elapsedTime , double x,double y) { _x = x; _y = y; multiSprite.Update(elapsedTime); multiSprites[1].Update(elapsedTime); effect.Update(elapsedTime); time_caculate += elapsedTime; if (l_x != _x || l_y != _y) { //向前移动一步 for (int i = positions.Length - 1; i > 0; i--) { Vector2D vct = new Vector2D(positions[i].X - positions[i - 1].X, positions[i].Y - positions[i - 1].Y); if (vct.X != 0 && vct.Y != 0) { vct.Normalize(); float dis = Vector2D.distance(positions[i], positions[i - 1]); //大于最大距离后加速 if (dis > max_distance) { speeds[i] = speeds[i - 1]; } //小于最小距离后减速 else if (dis < min_distance) { float percent = 0; percent = (float)i / (bodycount - 1); speeds[i] = speed - percent * speed * divide_percent; } positions[i].X -= vct.X * speeds[i] * (float)elapsedTime; positions[i].Y -= vct.Y * speeds[i] * (float)elapsedTime; } } positions[0].X = _x; positions[0].Y = _y; l_x = _x; l_y = _y; } }
public override void Update(double elapsedTime) { if (!working) { if (disposing) { if (disposingTime > 0) { angle += (float)elapsedTime * 360 * 3; _alpha = disposingTime / 12.0f; disposingTime--; //注销计时-1 } else { disposing = false; disabled = true; //在最后的旋转特效以后,同意注销此子弹 } } return; } speed += 2; //每帧速度+1 if (Datas.CurrentEnemys.Count > 0) { double distance = 100000000; //取一个极端数值,使每一个求得值都会小于这个值 double lastdistance = distance; foreach (Enemy e in Datas.CurrentEnemys) //将离Player距离最短的作为跟踪对象 { if (e.Position.X < -200 || e.Position.X > 200 || e.Position.Y < -40 || e.Position.Y > 500) { continue; } distance = (Datas.CurrentPlayer.Position.X - e.Position.X) * (Datas.CurrentPlayer.Position.X - e.Position.X) + (Datas.CurrentPlayer.Position.Y - e.Position.Y) * (Datas.CurrentPlayer.Position.Y - e.Position.Y); if (distance < lastdistance) { FollowEnemy = e; } lastdistance = distance; } } if (Position.X < -190 || Position.X > 190 || Position.Y < -20 || Position.Y > 450) { speed = 0; working = false; disabled = true; } move(elapsedTime); //跟踪旋转 if (FollowEnemy != null && !FollowEnemy.disabled && FollowEnemy.living) { Vector2D vct = new Vector2D(FollowEnemy.Position.X - Position.X, FollowEnemy.Position.Y - Position.Y); if (!(vct.X == 0 && vct.Y == 0)) { double distance = vct.X * vct.X + vct.Y * vct.Y; double percent = distance / 40000; if (percent > 1) { percent = 1; } percent = 1 - percent; float addangle = (float)percent * 1080; vct.Normalize(); double vct_angle = vct.GetAngle(); //目标的角度值 double dir_angle = Direction.GetAngle(); //当前方向的角度值 if (vct_angle < dir_angle) { if (dir_angle - vct_angle < 180) { Direction.rotate((addangle + rotateSpeed) * (float)elapsedTime); double d_2 = Direction.GetAngle(); if (d_2 > dir_angle) //如果左旋转后反而比原本角度更大,则证明旋转过度 { Direction.X = vct.X; Direction.Y = vct.Y; } else if (d_2 < vct_angle) //如果旋转后跑到方向角左边,则证明旋转过度 { Direction.X = vct.X; Direction.Y = vct.Y; } } else { Direction.rotate((-addangle - rotateSpeed) * (float)elapsedTime); double d_2 = Direction.GetAngle(); if (d_2 < dir_angle) //如果旋转后反而比原本角度更小,则证明旋转过了一周 { if (d_2 > vct_angle) { Direction.X = vct.X; Direction.Y = vct.Y; } } } } else if (vct_angle > dir_angle) { if (vct_angle - dir_angle < 180) { Direction.rotate((-addangle - rotateSpeed) * (float)elapsedTime); double d_2 = Direction.GetAngle(); if (d_2 < dir_angle) { Direction.X = vct.X; Direction.Y = vct.Y; } else if (d_2 > vct_angle) { Direction.X = vct.X; Direction.Y = vct.Y; } } else { Direction.rotate((addangle + rotateSpeed) * (float)elapsedTime); double d_2 = Direction.GetAngle(); if (d_2 > dir_angle) { if (d_2 < vct_angle) { Direction.X = vct.X; Direction.Y = vct.Y; } } } } } } }
float _alpha; //那段时间的透明值 #endregion Fields #region Constructors public ReimuBullet_Follow(TextureManager texturemanager, Vector2D direction) { bulletbody = new BlueCard(texturemanager); direction.Normalize(); this.Direction.X = direction.X; this.Direction.Y = direction.Y; attack = 100; speed = 400; BlueEsc = (new BlueBox(texturemanager)).GetSprite() ; }
public override void Render() { //for (int i = 1; i < dividecount; i++) //{ // Rays_sprites[i].SetPosition(positions[i].X, positions[i].Y); // //方向定义为指向前一个块 // Vector2D vct = new Vector2D(positions[i].X - positions[i - 1].X, // positions[i].Y - positions[i - 1].Y); // vct.Normalize(); // ag = vct.getcurve(); // Stage1State._renderer.DrawSprite(Rays_sprites[i], positions[i].X, positions[i].Y, ag + 90); //} float ag = 0; for (int i = ((int)dividecount-1); i > 0; i--) { Rays_sprites[i].SetPosition(positions[i].X, positions[i].Y); //方向定义为指向前一个块 Vector2D vct = new Vector2D(positions[i].X - positions[i - 1].X, positions[i].Y - positions[i - 1].Y); //如果点没有发生变化,则跳过本次循环 if (vct.X == 0 && vct.Y == 0) continue; vct.Normalize(); ag = vct.getcurve(); double x = positions[i].X; double y = positions[i].Y; if (x < 200 && x > -200 && y > -10 && y < 450) Stage1State._renderer.DrawSprite(Rays_sprites[i], (float)positions[i].X, (float)positions[i].Y, ag + 90); } ag = Direction.getcurve(); Rays_sprites[0].SetPosition(positions[0].X, positions[0].Y); Stage1State._renderer.DrawSprite(Rays_sprites[0], (float)positions[0].X, (float)positions[0].Y, ag - 90); }
public override void Update(double elapsedTime) { if (!working) { if (disposing) { if (disposingTime > 0) { angle += (float)elapsedTime * 360 * 3; _alpha = disposingTime / 12.0f; disposingTime--; //注销计时-1 } else { disposing = false; disabled = true; //在最后的旋转特效以后,同意注销此子弹 } } return; } speed += 2; //每帧速度+1 if (Datas.CurrentEnemys.Count > 0) { double distance = 100000000; //取一个极端数值,使每一个求得值都会小于这个值 double lastdistance = distance; foreach (Enemy e in Datas.CurrentEnemys) //将离Player距离最短的作为跟踪对象 { if (e.Position.X < -200 || e.Position.X > 200 || e.Position.Y < -40 || e.Position.Y > 500) continue; distance = (Datas.CurrentPlayer.Position.X - e.Position.X) * (Datas.CurrentPlayer.Position.X - e.Position.X) + (Datas.CurrentPlayer.Position.Y - e.Position.Y) * (Datas.CurrentPlayer.Position.Y - e.Position.Y); if (distance < lastdistance) { FollowEnemy = e; } lastdistance = distance; } } if (Position.X < -190 || Position.X > 190 || Position.Y < -20 || Position.Y > 450) { speed = 0; working = false; disabled = true; } move(elapsedTime); //跟踪旋转 if (FollowEnemy != null && !FollowEnemy.disabled && FollowEnemy.living) { Vector2D vct = new Vector2D(FollowEnemy.Position.X - Position.X, FollowEnemy.Position.Y - Position.Y); if (!(vct.X == 0 && vct.Y == 0)) { double distance = vct.X * vct.X + vct.Y * vct.Y; double percent = distance / 40000; if (percent > 1) percent = 1; percent = 1 - percent; float addangle = (float)percent * 1080; vct.Normalize(); double vct_angle = vct.GetAngle(); //目标的角度值 double dir_angle = Direction.GetAngle(); //当前方向的角度值 if (vct_angle < dir_angle) { if (dir_angle - vct_angle < 180) { Direction.rotate( (addangle + rotateSpeed) * (float)elapsedTime); double d_2 = Direction.GetAngle(); if (d_2 > dir_angle) //如果左旋转后反而比原本角度更大,则证明旋转过度 { Direction.X = vct.X; Direction.Y = vct.Y; } else if (d_2 < vct_angle) //如果旋转后跑到方向角左边,则证明旋转过度 { Direction.X = vct.X; Direction.Y = vct.Y; } } else { Direction.rotate((- addangle -rotateSpeed) * (float)elapsedTime); double d_2 = Direction.GetAngle(); if (d_2 < dir_angle) //如果旋转后反而比原本角度更小,则证明旋转过了一周 { if (d_2 > vct_angle) { Direction.X = vct.X; Direction.Y = vct.Y; } } } } else if (vct_angle > dir_angle) { if (vct_angle - dir_angle < 180) { Direction.rotate((-addangle -rotateSpeed) * (float)elapsedTime); double d_2 = Direction.GetAngle(); if (d_2 < dir_angle) { Direction.X = vct.X; Direction.Y = vct.Y; } else if (d_2 > vct_angle) { Direction.X = vct.X; Direction.Y = vct.Y; } } else { Direction.rotate((addangle + rotateSpeed) * (float)elapsedTime); double d_2 = Direction.GetAngle(); if (d_2 > dir_angle) { if (d_2 < vct_angle) { Direction.X = vct.X; Direction.Y = vct.Y; } } } } } } }
public override void Render(Renderer renderer) { //x,y是头的坐标位置,(以下是画出身体) float ag = 0; for (int i = bodycount-1; i > 0; i--) { sprites[i].SetPosition(positions[i].X, positions[i].Y); //方向定义为指向前一个块 Vector2D vct = new Vector2D(positions[i].X - positions[i - 1].X, positions[i].Y - positions[i - 1].Y); //如果点没有发生变化,则跳过本次循环 if (vct.X == 0 && vct.Y == 0) continue; vct.Normalize(); ag = vct.getcurve(); renderer.DrawSprite(sprites[i], positions[i].X, positions[i].Y, ag + 90); } }