导航Cocossharp和xamarin.forms

dddzy1tm  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(151)

我有2页,在第一页,当我点击列表视图中的项目之一,它应该导航到第二页,在第二页这里雪粒子出现。
之后,当我点击后退按钮,像往常一样,它会转到第一页,再次当我点击任何列表视图项目,它导航到第二页雪粒子消失,它只是显示一个黑色的屏幕。
下面是代码:
对于雪渲染,我有两个类

第一个

public class SnowScene : CCScene
{
    CCParticleSnow snow;

    public SnowScene(CCGameView gameView) : base(gameView)
    {
        var layer = new CCLayer();
        layer.Color=new CCColor3B(new CCColor4B(20,30,50,10));

        snow = new CCParticleSnow(new CCPoint(490, 20));
        snow.Position = new CCPoint(490 / 2, 800 + 1);
        snow.StartColor = new CCColor4F(CCColor4B.White);
        snow.EndColor = new CCColor4F(CCColor4B.Red);
        snow.StartSize = 15f;
        snow.StartSizeVar = 2f;
        snow.EndSize = 8f;
        snow.EndSizeVar = 1f;
        snow.Speed = 5f;
        snow.Gravity = new CCPoint(0.5f, -2);
        snow.EmissionRate = 3.5f;
        snow.Life = 50f;

        layer.AddChild(snow);
        this.AddLayer(layer);
    }
}

字符串

第二个

public class SnowyBackground : ContentView
{
    SnowScene overallScene;

    public SnowyBackground()
    {
        var sharpView = new CocosSharpView
        {
            HorizontalOptions = LayoutOptions.FillAndExpand,
            VerticalOptions = LayoutOptions.FillAndExpand
        };

        sharpView.ViewCreated += (sender, e) =>
        {
            var ccGView = sender as CCGameView;

            if (ccGView != null)
            {
                ccGView.DesignResolution = new CCSizeI(490, 800);
                overallScene = new SnowScene(ccGView);
                ccGView.RunWithScene(overallScene);
            }
        };

        Content = sharpView;
    }

}

在第二页中的Xaml现在,当我在第一页(第1页)中单击列表视图的项目时,如下所示:在第一页中单击列表视图项目的事件处理程序-

async void Handle_ItemSelected(object sender, Xamarin.Forms.SelectedItemChangedEventArgs e)
{
    try
    {
        await Navigation.PushModalAsync(new Page2(),false);
    }
    catch(Exception ex)
    { }
}


第二页-

<?xml version="1.0" encoding="utf-8"?>
<ContentPage 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    xmlns:local="clr-namespace:Particle" 
    x:Class="Particle.ParticlePage">

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <local:SnowyBackgroundView HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Grid.RowSpan="2" />

</Grid>


它导航到第2页,它成功地显示了雪渲染。但是当我重复同样的步骤.我的意思是如果我点击第2页的后退按钮,然后它转到第1页,在这里当我再次点击lictview项目,它转到第二页,但它不显示雪渲染,只是一个黑屏。

hmae6n7t

hmae6n7t1#

我也有这个问题;我没有找到解决这个问题的方法,但我找到了一种方法来避免它。这个问题的发生是因为Xamarin.Forms在一个应用程序上只支持一个CocosSharpView。所以为了避免这个问题,我们将一直导航到现有的Page,但不创建它的新示例。
我来详细说明避免它的步骤,(我们每次导航时都会使用同一个页面):
1.更改App.xaml.cs以使用Page-Navigation(而不是Modal-Navigation)并将Page 1和Page 2推送到Navigation-Stack:

public partial class App : Application
 {
     public App()
     {
         InitializeComponent();
         MainPage = new NavigationPage(new Page2());
         (MainPage as NavigationPage).Navigation.PushAsync(new Page1());
     }
 }

字符串
1.将Page 2(带有 CocosSharpView 的页面)一直放在Navigation-Stack的底部,导航将是这样的:Navigation Stack Diagram当你想从Page 1导航到Page 2时,你只需要将Page 1从堆栈中删除:

Navigation.PopAsync();


当你想回到Page 1时,你把它推到Navigation-Stack:

Navigation.PushAsync(new Page1);


1.您可以重写Page 2对象的 OnBackButtonPressed() 函数,以更改其行为:

public class Page2 : ContentPage
 {
     protected override bool OnBackButtonPressed()
     {
         Navigation.PushAsync(new Page1());
         return true;
     }
 }

记住,不是推送Page 2-删除Page 1,而是推送Page 2

相关问题