【问题标题】:Why wont my .UWP emulator launch in Visual Studio?为什么我的 .UWP 模拟器无法在 Visual Studio 中启动?
【发布时间】:2021-02-25 01:31:40
【问题描述】:

我正在创建一个相当简单的应用程序来了解 Xamarin 和 SkiaSharp 等的基础知识。基本上,只是一个球在背景中移动,但是当我尝试运行我的代码以查看模拟器中发生的情况时,它卡住了加载,当我跳回 Vis 时。 Studio 模拟器崩溃。

我的代码是这样的:

using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using SkiaSharp;
using SkiaSharp.Views.Forms;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.CompilerServices;

namespace Ball_Bounce
{
   public partial class MainPage : ContentPage
   {
       int posX = 0;
       int posY = 0;
       int dx = 5;
       int dy = 5;
       int ballD = 100;
       bool running = true;
     

                       

       SKPaint blackFillPaint = new SKPaint
       {
           Style = SKPaintStyle.Fill,
           Color = SKColors.Black
       };

       SKPaint Ball = new SKPaint
       {
           Color = SKColors.Black,

       };
       public MainPage()
       {
           InitializeComponent();

           Device.StartTimer(TimeSpan.FromSeconds(1f / 60), () =>
              {
                  CanvasView.InvalidateSurface();
                  return true;
              });
           
       }

       private void CanvasView_PaintSurface(object sender, SKPaintSurfaceEventArgs e)
       {
           SKSurface surface = e.Surface;
           SKCanvas canvas = surface.Canvas;
           canvas.Clear(SKColors.SteelBlue);
           int width = e.Info.Width;
           int height = e.Info.Height;
           canvas.Translate(width / 2, height / 2);

           do
           {
               posX += dx;
               posY += dy;
           } while (running == true);

           canvas.DrawCircle(posX, posY, ballD, blackFillPaint);
           


       }
   }
}

在我添加声明变量的部分之前:

        int posY = 0;
        int dx = 5;
        int dy = 5;
        int ballD = 100;
        bool running = true;

然后是这个:

            do
            {
                posX += dx;
                posY += dy;
            } while (running == true);

它会启动并显示漂亮的石板蓝色背景和黑色球(我在启动时没有声明在哪里绘制球的变量,而是使用整数。)但是当我试图让球穿过屏幕时,它根本不会启动。任何帮助将不胜感激。

【问题讨论】:

  • 你的do..while 循环永远不会退出,它只会一直旋转,耗尽你的系统资源,直到操作系统杀死它
  • @Jason - 好的,这是有道理的,经过更多研究后,我发现了 Xamarin 中的翻译功能,但我不太明白如何使用它。使用该功能会做我想做的事吗? (在屏幕上移动球)
  • 不知道。您正在做的事情可能没问题,但您只需要在每次计时器触发时为 一帧 设置动画。不需要循环。
  • @Jason - 我删除了循环,它工作了 :) 谢谢!
  • @JonTheBrownDog 嗨,如果你解决了这个问题,你可以分享解决方案作为答案,然后其他有同样问题的人就会知道。

标签: c# xamarin xamarin.uwp


【解决方案1】:

您的 do..while 循环永远不会退出,它只会一直旋转,耗尽您的系统资源,直到操作系统将其杀死……您只需在每次计时器触发时为一帧设置动画。不需要循环。 @杰森

删除循环意味着模拟器可以渲染图像并自行刷新代码,就像它自己围绕代码构建的循环一样。

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 2013-11-24
    • 2011-08-23
    • 2012-04-26
    • 2016-02-02
    • 2015-05-30
    • 1970-01-01
    • 2015-06-15
    • 2020-02-05
    相关资源
    最近更新 更多