private void TrySetEnemyLoop() { if (EnemyWaiting.Count == 0) { return; } if (Frame - _lastFrameSetEnemy > _enemyPlacingFrame) //准备写创造新敌人的条件 { _lastFrameSetEnemy = Frame; RoutePosition r = new RoutePosition(FirstLink, FirstLink.GetNodeBeside(BeginNode), 0); switch (EnemyWaiting.Dequeue()) { case Enemy.EnemyTypeEnum.Big: Factory.CreatEnemy(r); break; case Enemy.EnemyTypeEnum.Small: var e = Factory.CreatEnemy(r); e.BecomeSmall(); break; case Enemy.EnemyTypeEnum.None: break; } } }
private void SetMap() { //一、设置读取器 Stream stream = new FileStream(LevelPath, FileMode.Open); XmlReaderSettings settings = new XmlReaderSettings(); settings.Async = true; settings.IgnoreWhitespace = true; XmlReader reader = XmlReader.Create(stream, settings); //二、生成点 reader.ReadToFollowing("allnodes"); while (reader.NodeType != XmlNodeType.EndElement || reader.Name != "allnodes") {//读取循环到结束节点为止 reader.ReadToFollowing("id"); int id = Convert.ToInt32(reader.ReadString()); reader.ReadToFollowing("x"); float x = Convert.ToSingle(reader.ReadString()); reader.ReadToFollowing("y"); float y = Convert.ToSingle(reader.ReadString()); Factory.CreatNode(id, new Vector2(x, y)); reader.ReadEndElement(); reader.ReadEndElement(); } //设置起点终点 reader.ReadToFollowing("startnode"); reader.Read(); NodeDic[reader.ReadContentAsInt()].BecomeBegin(); reader.ReadToFollowing("endnode"); reader.Read(); NodeDic[reader.ReadContentAsInt()].BecomeEnd(); //三、生成链接 while (reader.NodeType != XmlNodeType.EndElement || reader.Name != "links") { reader.ReadToFollowing("start"); reader.Read(); int start = reader.ReadContentAsInt(); reader.ReadToFollowing("end"); reader.Read(); int end = reader.ReadContentAsInt(); Factory.CreatLink(NodeDic[start], NodeDic[end]); reader.ReadEndElement(); reader.ReadEndElement(); } //四、设置敌人列表 reader.ReadToFollowing("enemies"); if (!reader.IsEmptyElement) { while (reader.NodeType != XmlNodeType.EndElement || reader.Name != "enemies") { reader.ReadToFollowing("type"); reader.Read(); EnemyWaiting.Enqueue((Enemy.EnemyTypeEnum)reader.ReadContentAsInt()); reader.ReadEndElement(); reader.ReadEndElement(); } } //五、生成既有火箭 reader.ReadToFollowing("allarrows"); if (!reader.IsEmptyElement) { while (reader.NodeType != XmlNodeType.EndElement || reader.Name != "allarrows") { reader.ReadToFollowing("type"); reader.Read(); int type = reader.ReadContentAsInt(); reader.ReadToFollowing("x"); reader.Read(); float x = reader.ReadContentAsFloat(); reader.ReadToFollowing("y"); reader.Read(); float y = reader.ReadContentAsFloat(); reader.ReadToFollowing("direction"); reader.Read(); float direction = reader.ReadContentAsFloat(); Vector2 position = new Vector2(x, y); Vector2 dVector = new Vector2(Mathf.Cos(direction * Mathf.Deg2Rad + Mathf.PI / 2), Mathf.Sin(direction * Mathf.Deg2Rad + Mathf.PI / 2)); switch (type) { case 0: Factory.CreatDrillRocket(position, dVector); break; case 1: Factory.CreatReturnRocket(position, dVector); break; } reader.ReadEndElement(); reader.ReadEndElement(); } } //六、设置玩家可用火箭 reader.ReadToFollowing("attackarrow"); reader.Read(); DrillRocketUnused = reader.ReadContentAsInt(); reader.ReadToFollowing("returnarrow"); reader.Read(); ReturnRocketUnused = reader.ReadContentAsInt(); reader.Close(); }