//-----------------以下为命令修改------------------// //修改后的信息处理函数 protected override void DoMessages(double elapsedTime) { if (!working) { return; } foreach (CmpMessage msg in ComponentMessages) { //0号攻击判定 if (msg.Tag == CmpMessage.CollisionMasseageNormal) { this.working = false; //进入死亡模式 isdead = true; CollisionMessages.CollisionMasseageNormal m = msg as CollisionMessages.CollisionMasseageNormal; 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(); effect = new Entities.WindBlueEffect(texturemanager, Position, 360 - (float)vct.GetAngle(), 40, 40); } } ComponentMessages.Clear(); }
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 bool Collision(Bullet bullet, ref MessageManager msgManager) { float x = (float)bullet.Position.X; float y = (float)bullet.Position.Y; double distance = (Position.X - x) * (Position.X - x) + (Position.Y - y) * (Position.Y - y); if (distance > AttckRadiusDouble) { return(false); } Vector2D vct = new Vector2D(Position.X - x, Position.Y - y); vct.Normalize(); double ag = vct.GetAngle(); int changecount = currentIndex - firstIndex; double oriag = JudgeBegin - AverageAngle * changecount; if (oriag < 0) { oriag = 360 + oriag; if (oriag + JudgeArea > 360) { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea - 360)) { return(false); } } else { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea)) { return(false); } } } else { if (oriag - JudgeArea < 0) { if (ag < (360 + oriag - JudgeArea) && ag > (oriag + JudgeArea)) { return(false); } } else { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea)) { return(false); } } } CollisionMessages.CollisionMasseageNormal mess = new CollisionMessages.CollisionMasseageNormal(); mess.Position.X = Position.X; mess.Position.Y = Position.Y; mess.SetColor(0); msgManager.AcceptMessage(mess); return(true); }
public override bool Collision(Bullet bullet, ref MessageManager msgManager) { float x = (float)bullet.Position.X; float y = (float)bullet.Position.Y; double distance = (Position.X - x) * (Position.X - x) + (Position.Y - y) * (Position.Y - y); if (distance > AttckRadiusDouble) { return false; } Vector2D vct = new Vector2D(Position.X - x, Position.Y - y); vct.Normalize(); double ag = vct.GetAngle(); int changecount = currentIndex - firstIndex; double oriag = JudgeBegin - AverageAngle * changecount; if (oriag < 0) { oriag = 360 + oriag; if (oriag + JudgeArea > 360) { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea - 360)) return false; } else { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea)) return false; } } else { if (oriag - JudgeArea < 0) { if (ag < (360 + oriag - JudgeArea) && ag > (oriag + JudgeArea)) { return false; } } else { if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea)) return false; } } CollisionMessages.CollisionMasseageNormal mess = new CollisionMessages.CollisionMasseageNormal(); mess.Position.X = Position.X; mess.Position.Y = Position.Y; mess.SetColor(0); msgManager.AcceptMessage(mess); return true; }