예제 #1
0
 /// <summary>
 /// 重绘精灵
 /// </summary>
 /// <param name="id">精灵id</param>
 /// <param name="vector">精灵所在向量</param>
 /// <param name="rType">资源类型</param>
 /// <param name="descriptor">精灵描述子</param>
 /// <param name="forceReload">是否强制重新载入资源文件</param>
 private void ReDrawSprite(int id, List<YuriSprite> vector, ResourceType rType, SpriteDescriptor descriptor, bool forceReload)
 {
     // 不需要重绘的情况
     if (descriptor == null) { return; }
     YuriSprite sprite = vector[id], newSprite = null;
     // 强制重新载入或资源名称不同时重新加载资源文件
     if (sprite == null ||
         sprite.ResourceName != descriptor.ResourceName ||
         forceReload)
     {
         switch (rType)
         {
             case ResourceType.Background:
                 vector[id] = newSprite = ResourceManager.GetInstance().GetBackground(descriptor.ResourceName, descriptor.CutRect);
                 break;
             case ResourceType.Stand:
                 vector[id] = newSprite = ResourceManager.GetInstance().GetCharacterStand(descriptor.ResourceName, descriptor.CutRect);
                 break;
             case ResourceType.Pictures:
                 vector[id] = newSprite = ResourceManager.GetInstance().GetPicture(descriptor.ResourceName, descriptor.CutRect);
                 break;
         }
     }
     // 重绘精灵
     this.RemoveSprite(sprite);
     this.DrawSprite(newSprite, descriptor);
 }
예제 #2
0
 /// <summary>
 /// 为屏幕增加一个图片精灵描述子
 /// </summary>
 /// <param name="id">图片的id</param>
 /// <param name="source">资源名称</param>
 /// <param name="X">左上角在画面的X坐标</param>
 /// <param name="Y">左上角在画面的Y坐标</param>
 /// <param name="Z">Z坐标</param>
 /// <param name="Angle">角度</param>
 /// <param name="Opacity">不透明度</param>
 /// <param name="anchor">锚点类型</param>
 /// <param name="cut">纹理切割矩</param>
 public void AddPicture(int id, string source, double X, double Y, int Z, double ScaleX, double ScaleY, double Angle, double Opacity, SpriteAnchorType anchor, Int32Rect cut)
 {
     SpriteDescriptor sd = new SpriteDescriptor()
     {
         Id = id,
         ResourceType = ResourceType.Pictures,
         ResourceName = source,
         X = X,
         Y = Y,
         Z = Z + GlobalDataContainer.GAME_Z_PICTURES,
         ScaleX = ScaleX,
         ScaleY = ScaleY,
         Angle = Angle,
         Opacity = Opacity,
         AnchorType = anchor,
         CutRect = cut
     };
     this.pictureDescVec[id] = sd;
 }
예제 #3
0
 /// <summary>
 /// 为主窗体描绘一个精灵
 /// </summary>
 /// <param name="sprite">精灵</param>
 /// <param name="descriptor">精灵描述子</param>
 private void DrawSprite(YuriSprite sprite, SpriteDescriptor descriptor)
 {
     if (sprite == null) { return; }
     Image spriteImage = new Image();
     BitmapImage bmp = sprite.SpriteBitmapImage;
     spriteImage.Width = bmp.PixelWidth;
     spriteImage.Height = bmp.PixelHeight;
     spriteImage.Source = bmp;
     spriteImage.Opacity = descriptor.Opacity;
     sprite.CutRect = descriptor.CutRect;
     sprite.DisplayBinding = spriteImage;
     sprite.Anchor = descriptor.AnchorType;
     Canvas.SetLeft(spriteImage, descriptor.X);
     Canvas.SetTop(spriteImage, descriptor.Y);
     Canvas.SetZIndex(spriteImage, descriptor.Z);
     spriteImage.Visibility = Visibility.Visible;
     this.view.BO_MainGrid.Children.Add(spriteImage);
     sprite.InitAnimationRenderTransform();
     SpriteAnimation.RotateToAnimation(sprite, TimeSpan.FromMilliseconds(0), descriptor.Angle, 0);
     SpriteAnimation.ScaleToAnimation(sprite, TimeSpan.FromMilliseconds(0), descriptor.ScaleX, descriptor.ScaleY, 0, 0);
 }
예제 #4
0
 /// <summary>
 /// 为屏幕增加一个立绘精灵描述子
 /// </summary>
 /// <param name="id">立绘位置id号</param>
 /// <param name="source">资源名称</param>
 /// <param name="X">左上角在画面的X坐标</param>
 /// <param name="Y">左上角在画面的Y坐标</param>
 /// <param name="Z">Z坐标</param>
 /// <param name="Angle">角度</param>
 /// <param name="Opacity">不透明度</param>
 /// <param name="anchor">锚点类型</param>
 /// <param name="cut">纹理切割矩</param>
 public void AddCharacterStand(int id, string source, double X, double Y, int Z, double Angle, double Opacity, SpriteAnchorType anchor, Int32Rect cut)
 {
     SpriteDescriptor sd = new SpriteDescriptor()
     {
         Id = id,
         ResourceType = ResourceType.Stand,
         ResourceName = source,
         X = X,
         Y = Y,
         Z = Z + GlobalDataContainer.GAME_Z_CHARACTERSTAND,
         Angle = Angle,
         Opacity = Opacity,
         AnchorType = anchor,
         CutRect = cut
     };
     this.characterDescVec[id] = sd;
 }
예제 #5
0
 /// <summary>
 /// 为屏幕增加一个立绘精灵描述子
 /// </summary>
 /// <param name="id">立绘位置id号</param>
 /// <param name="source">资源名称</param>
 /// <param name="cst">立绘位置枚举</param>
 /// <param name="Z">Z坐标</param>
 /// <param name="Angle">角度</param>
 /// <param name="Opacity">不透明度</param>
 /// <param name="anchor">锚点类型</param>
 /// <param name="cut">纹理切割矩</param>
 public void AddCharacterStand(int id, string source, CharacterStandType cst, int Z, double Angle, double Opacity, SpriteAnchorType anchor, Int32Rect cut)
 {
     SpriteDescriptor sd = null;
     switch (cst)
     {
         case CharacterStandType.Left:
             sd = new SpriteDescriptor()
             {
                 Id = id,
                 ResourceType = ResourceType.Stand,
                 ResourceName = source,
                 X = GlobalDataContainer.GAME_CHARACTERSTAND_LEFT_X,
                 Y = GlobalDataContainer.GAME_CHARACTERSTAND_LEFT_Y,
                 Z = Z + GlobalDataContainer.GAME_Z_CHARACTERSTAND,
                 Angle = Angle,
                 Opacity = Opacity,
                 AnchorType = anchor,
                 CutRect = cut
             };
             break;
         case CharacterStandType.MidLeft:
             sd = new SpriteDescriptor()
             {
                 Id = id,
                 ResourceType = ResourceType.Stand,
                 ResourceName = source,
                 X = GlobalDataContainer.GAME_CHARACTERSTAND_MIDLEFT_X,
                 Y = GlobalDataContainer.GAME_CHARACTERSTAND_MIDLEFT_Y,
                 Z = Z,
                 Angle = Angle,
                 Opacity = Opacity,
                 AnchorType = anchor,
                 CutRect = cut
             };
             break;
         case CharacterStandType.Mid:
             sd = new SpriteDescriptor()
             {
                 Id = id,
                 ResourceType = ResourceType.Stand,
                 ResourceName = source,
                 X = GlobalDataContainer.GAME_CHARACTERSTAND_MID_X,
                 Y = GlobalDataContainer.GAME_CHARACTERSTAND_MID_Y,
                 Z = Z,
                 Angle = Angle,
                 Opacity = Opacity,
                 AnchorType = anchor,
                 CutRect = cut
             };
             break;
         case CharacterStandType.MidRight:
             sd = new SpriteDescriptor()
             {
                 Id = id,
                 ResourceType = ResourceType.Stand,
                 ResourceName = source,
                 X = GlobalDataContainer.GAME_CHARACTERSTAND_MIDRIGHT_X,
                 Y = GlobalDataContainer.GAME_CHARACTERSTAND_MIDRIGHT_Y,
                 Z = Z,
                 Angle = Angle,
                 Opacity = Opacity,
                 AnchorType = anchor,
                 CutRect = cut
             };
             break;
         case CharacterStandType.Right:
             sd = new SpriteDescriptor()
             {
                 Id = id,
                 ResourceType = ResourceType.Stand,
                 ResourceName = source,
                 X = GlobalDataContainer.GAME_CHARACTERSTAND_RIGHT_X,
                 Y = GlobalDataContainer.GAME_CHARACTERSTAND_RIGHT_Y,
                 Z = Z,
                 Angle = Angle,
                 Opacity = Opacity,
                 AnchorType = anchor,
                 CutRect = cut
             };
             break;
     }
     this.characterDescVec[id] = sd;
 }
예제 #6
0
 /// <summary>
 /// 为屏幕增加一个按钮描述子
 /// </summary>
 /// <param name="id">按钮的id</param>
 /// <param name="enable">是否可点击</param>
 /// <param name="X">左上角在画面的X坐标</param>
 /// <param name="Y">左上角在画面的Y坐标</param>
 /// <param name="jumpTarget">按下后要跳转的标签名</param>
 /// <param name="funcCallSign">函数调用签名</param>
 /// <param name="type">按钮存续类型</param>
 /// <param name="normalDesc">正常时的精灵描述子</param>
 /// <param name="overDesc">鼠标悬停时的精灵描述子</param>
 /// <param name="onDesc">鼠标按下时的精灵描述子</param>
 public void AddButton(int id, bool enable, double X, double Y, string jumpTarget, string funcCallSign, string type, SpriteDescriptor normalDesc, SpriteDescriptor overDesc = null, SpriteDescriptor onDesc = null)
 {
     SpriteButtonDescriptor sbd = new SpriteButtonDescriptor()
     {
         Enable = enable,
         X = X,
         Y = Y,
         Z = GlobalDataContainer.GAME_Z_BUTTON + id,
         JumpLabel = jumpTarget,
         InterruptFuncSign = funcCallSign,
         NormalDescriptor = normalDesc,
         OverDescriptor = overDesc,
         OnDescriptor = onDesc,
         Opacity = 1.0,
         Eternal = type == "once" ? false : true
     };
     this.buttonDescVec[id] = sbd;
 }
예제 #7
0
 /// <summary>
 /// 为屏幕增加一个选择支描述子
 /// </summary>
 /// <param name="id">选择支按钮id</param>
 /// <param name="X">左上角在画面的X坐标</param>
 /// <param name="Y">左上角在画面的Y坐标</param>
 /// <param name="jumpTarget">按下后要跳转的标签名</param>
 /// <param name="text">选择支按钮上的文本</param>
 /// <param name="normalDesc">正常时的精灵描述子</param>
 /// <param name="overDesc">鼠标悬停时的精灵描述子</param>
 /// <param name="onDesc">鼠标按下时的精灵描述子</param>
 public void AddBranchButton(int id, double X, double Y, string jumpTarget, string text, SpriteDescriptor normalDesc, SpriteDescriptor overDesc = null, SpriteDescriptor onDesc = null)
 {
     BranchButtonDescriptor bbd = new BranchButtonDescriptor()
     {
         Id = id,
         JumpTarget = jumpTarget,
         X = X,
         Y = Y,
         Z = GlobalDataContainer.GAME_Z_BRANCHBUTTON + id,
         Text = text,
         NormalDescriptor = normalDesc,
         OverDescriptor = overDesc,
         OnDescriptor = onDesc
     };
     this.branchDescVec[id] = bbd;
 }
예제 #8
0
 /// <summary>
 /// 为屏幕增加一个背景精灵描述子
 /// </summary>
 /// <param name="id">背景层的类型:0-背景 1-前景</param>
 /// <param name="source">资源名称</param>
 /// <param name="X">左上角在画面的X坐标</param>
 /// <param name="Y">左上角在画面的Y坐标</param>
 /// <param name="Z">Z坐标</param>
 /// <param name="Angle">角度</param>
 /// <param name="Opacity">不透明度</param>
 /// <param name="anchor">锚点类型</param>
 /// <param name="cut">纹理切割矩</param>
 public void AddBackground(int id, string source, double X, double Y, int Z, double Angle, double Opacity, double ScaleX, double ScaleY, SpriteAnchorType anchor, Int32Rect cut)
 {
     SpriteDescriptor sd = new SpriteDescriptor()
     {
         Id = id,
         ResourceType = ResourceType.Background,
         ResourceName = source,
         X = X,
         Y = Y,
         Z = Z + GlobalDataContainer.GAME_Z_BACKGROUND,
         ScaleX = ScaleX,
         ScaleY = ScaleY,
         Angle = Angle,
         Opacity = Opacity,
         AnchorType = anchor,
         CutRect = cut
     };
     this.backgroundDescVec[id] = sd;
 }
예제 #9
0
 /// <summary>
 /// 演绎函数:放置按钮
 /// </summary>
 /// <param name="id">按钮id</param>
 /// <param name="enable">按钮是否可点击</param>
 /// <param name="x">X坐标</param>
 /// <param name="y">Y坐标</param>
 /// <param name="target">跳转目标</param>
 /// <param name="funcsign">中断函数调用签名</param>
 /// <param name="normal">正常图资源名</param>
 /// <param name="over">悬停图资源名</param>
 /// <param name="on">按下图资源名</param>
 /// <param name="type">存续类型</param>
 private void Button(int id, bool enable, double x, double y, string target, string funcsign, string normal, string over, string on, string type)
 {
     SpriteDescriptor normalDesc = new SpriteDescriptor()
     {
         ResourceName = normal
     }, overDesc = null, onDesc = null;
     if (over != "")
     {
         overDesc = new SpriteDescriptor()
         {
             ResourceName = over
         };
     }
     if (on != "")
     {
         onDesc = new SpriteDescriptor()
         {
             ResourceName = on
         };
     }
     Director.ScrMana.AddButton(id, enable, x, y, target, funcsign, type, normalDesc, overDesc, onDesc);
     this.viewMana.Draw(id, ResourceType.Button);
 }
예제 #10
0
 /// <summary>
 /// 选择项
 /// </summary>
 /// <param name="linkStr">选择项跳转链</param>
 private void Branch(string linkStr)
 {
     // 处理跳转链
     List<KeyValuePair<string, string>> tagList = new List<KeyValuePair<string, string>>();
     string[] linkItems = linkStr.Split(';');
     foreach (var linkItem in linkItems)
     {
         string[] linkPair = linkItem.Split(',');
         if (linkPair.Length == 2)
         {
             tagList.Add(new KeyValuePair<string,string>(linkPair[0].Trim(), linkPair[1].Trim()));
         }
         else
         {
             CommonUtils.ConsoleLine(String.Format("Ignore Branch Item: {0}", linkItem),
                 "UpdateRender", OutputStyle.Error);
         }
     }
     if (tagList.Count == 0)
     {
         return;
     }
     // 处理按钮显示参数
     double GroupX = GlobalDataContainer.GAME_WINDOW_WIDTH / 2.0 - GlobalDataContainer.GAME_BRANCH_WIDTH / 2.0;
     double BeginY = GlobalDataContainer.GAME_WINDOW_ACTUALHEIGHT / 2.0 - (GlobalDataContainer.GAME_BRANCH_HEIGHT * 2.0) * (tagList.Count / 2.0);
     double DeltaY = GlobalDataContainer.GAME_BRANCH_HEIGHT;
     // 描绘按钮
     for (int i = 0; i < tagList.Count; i++)
     {
         SpriteDescriptor normalDesc = new SpriteDescriptor()
         {
             ResourceName = GlobalDataContainer.GAME_BRANCH_BACKGROUNDNORMAL
         },
         overDesc = new SpriteDescriptor()
         {
             ResourceName = GlobalDataContainer.GAME_BRANCH_BACKGROUNDSELECT
         },
         onDesc = new SpriteDescriptor()
         {
             ResourceName = GlobalDataContainer.GAME_BRANCH_BACKGROUNDSELECT
         };
         Director.ScrMana.AddBranchButton(i, GroupX, BeginY + DeltaY * 2 * i, tagList[i].Value, tagList[i].Key, normalDesc, overDesc, onDesc);
         this.viewMana.Draw(i, ResourceType.BranchButton);
     }
     // 追加等待
     Director.RunMana.UserWait("UpdateRender", String.Format("BranchWaitFor:{0}", linkStr));
 }