0

I'm new to cocossharp. I installed cocossharp templates for visual studio, when i select a new cocossharp android game, and run the application, all I get is a black screen with a logo at the top. From the code, I believe i am supposed to get a blue screen with a label written

 protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        // Get our game view from the layout resource,
        // and attach the view created event to it
        CCGameView gameView = (CCGameView)FindViewById(Resource.Id.GameView);
        gameView.ViewCreated += LoadGame;
    }

    void LoadGame(object sender, EventArgs e)
    {
        CCGameView gameView = sender as CCGameView;

        if (gameView != null)
        {
            var contentSearchPaths = new List<string>() { "Fonts", "Sounds" };
            CCSizeI viewSize = gameView.ViewSize;

            int width = 1024;
            int height = 768;

            // Set world dimensions
            gameView.DesignResolution = new CCSizeI(width, height);

            // Determine whether to use the high or low def versions of our images
            // Make sure the default texel to content size ratio is set correctly
            // Of course you're free to have a finer set of image resolutions e.g (ld, hd, super-hd)
            if (width < viewSize.Width)
            {
                contentSearchPaths.Add("Images/Hd");
                CCSprite.DefaultTexelToContentSizeRatio = 2.0f;
            }
            else
            {
                contentSearchPaths.Add("Images/Ld");
                CCSprite.DefaultTexelToContentSizeRatio = 1.0f;
            }

            gameView.ContentManager.SearchPaths = contentSearchPaths;

            CCScene gameScene = new CCScene(gameView);
            gameScene.AddLayer(new GameLayer());
            gameView.RunWithScene(gameScene);
        }
    }
 public class GameLayer : CCLayerColor
{

    // Define a label variable
    CCLabel label;

    public GameLayer() : base(CCColor4B.Blue)
    {

        // create and initialize a Label
        label = new CCLabel("Hello CocosSharp", "Fonts/MarkerFelt", 22, CCLabelFormat.SpriteFont);

        // add the label as a child to this Layer
        AddChild(label);

    }

    protected override void AddedToScene()
    {
        base.AddedToScene();

        // Use the bounds to layout the positioning of our drawable assets
        var bounds = VisibleBoundsWorldspace;

        // position the label on the center of the screen
        label.Position = bounds.Center;

        // Register for touch events
        var touchListener = new CCEventListenerTouchAllAtOnce();
        touchListener.OnTouchesEnded = OnTouchesEnded;
        AddEventListener(touchListener, this);
    }

    void OnTouchesEnded(List<CCTouch> touches, CCEvent touchEvent)
    {
        if (touches.Count > 0)
        {
            // Perform touch handling here
        }
    }
}

I put a break point in the method thats called when the event ViewCreated is fired, the breakpoint is never hit. I tried creating the CCGameView first then then registering the eventhandler because I thought the event was firing before registering

CCGameView gameView = new CCGameView(this);
gameView.ViewCreated += LoadGame;
gameView = (CCGameView)FindViewById(Resource.Id.GameView);

then I tried calling the LoadGame method directly

CCGameView gameView = (CCGameView)FindViewById(Resource.Id.GameView);
gameView.ViewCreated += LoadGame;
LoadGame(gameView, EventArgs.Empty);

but this resulted in a null exception for the gameView.ContentManager.

My only other suspicion is the emulator itself, perhaps it needs something installed extra, however for a normal xamarin android project it works perfectly. Iv also tried looking at the various examples on Xamarin but they all use Application Delegate, which if i'm not mistaken, was the old way of doing thing. If anyone can help, Id appreciate it. Thanks

1 Answers1

0

It was an emulator issue, had to check the Use Host GPU option on the emulator. On the Android Virtual Device Manager where I can select my created emulators, I selected an emulator I had created, then instead of starting it, I first Edited it, that's where I found the option (Since I had already created some emulators). The answer is here

Community
  • 1
  • 1