Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Duda con input en Visual C#

Iniciado por Jose134, Enero 05, 2016, 05:32:48 PM

Tema anterior - Siguiente tema
Hola a todos compañeros de UnitySpain, me he alejado un poco de Unity para dedicarme a un proyectillo en visual c# pero he llegado a un punto en el que no tengo ni idea de que hacer. Me gustaria hacer un sistema de input (mas o menos con las mismas funciones que tiene el de unity) pero no se muy bien como recoger la input (tambien estoy teniendo problemillas para implementar el game loop ya que no se muy bien que funciones deberia poner dentro de el loop y tal) Os dejo algo de codigo que tal vez os pueda ser de ayuda ( la clase Input.cs no la pongo porque basicamente solo la he creado, no he hecho nada en ella todavia xD )(La optimizacion del codigo ahora mismo es lo de menos y muchas de las cosas que tengo hechas son solo provisionales, me gustaria optimizarlo pero primero quiero conseguir que funcione todo) Game.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;

namespace _2DGameTest
{
    class Game
    {
        //---------Constants---------\
        public const int Canvas_Width = 600;
        public const int Canvas_Height = 400;

        //---------Variables---------\
        private GraphicsEngine graphicsEngine;
        private Camera _cam;
        public Camera cam
        {
            get { return _cam; }
        }
       
        public Input input = new Input();
       
        public List<GameObject> gameObjectsInstances = new List<GameObject>();
        private Thread gameLoopThread;

        private bool running;

        //---------Constructor---------\
        public Game ()
        {
            _cam = new Camera(0, 0);
        }

        #region GraphicsEngine
        public void StartGraphics (Graphics g)
        {
            graphicsEngine = new GraphicsEngine(g, this);
            graphicsEngine.Initialize();
        }
        public void StopGraphics ()
        {
            graphicsEngine.Stop();
        }
        #endregion

        public void StartGame ()
        {
            gameLoopThread = new Thread(new ThreadStart(GameLoop));
            gameLoopThread.Start();

            running = true;
        }
        public void StopGame ()
        {
            running = false;
            gameLoopThread.Abort();
        }

        public void GameLoop ()
        {
            while (running)
            {

                Thread.Sleep(1);
            }
        }
    }
}
 GameObject.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading.Tasks;

namespace _2DGameTest
{
    class GameObject
    {
        //---------Image---------\
        public Bitmap sprite;

        //---------Position---------\
        public float x;
        public float y;
        //---------Size---------\
        private float _width;
        private float _height;

        public float width
        {
            get { return _width; }
        }
        public float height
        {
            get { return _height; }
        }

        //---------Constructor---------\
        public GameObject (Bitmap sprite, float x, float y)
        {
            this.sprite = sprite;
            this.x = x;
            this.y = y;
            this._width = sprite.Width;
            this._height = sprite.Height;
        }
    }
}
 Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _2DGameTest
{
    public partial class GameForm : Form
    {
        private Game game = new Game();

        private GameObject player;
        private GameObject enemy;

        public GameForm()
        {
            InitializeComponent();

            player = new GameObject(_2DGameTest.Properties.Resources.Player, 125, 80);
            enemy = new GameObject(_2DGameTest.Properties.Resources.Enemy, 200, 80);
        }

        private void canvas_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = canvas.CreateGraphics();
            game.StartGraphics(g);
           
            game.gameObjectsInstances.Add(player);
            game.gameObjectsInstances.Add(enemy);
        }

        private void GameForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            game.StopGraphics();
        }
       
        /* Esto por algun motivo no funciona y seria una buena referencia para empezar :c
        private void GameForm_KeyDown(object sender, KeyEventArgs e)
        {

            char key = (char)e.KeyValue;

            switch (key)
            {
                case 'W':
                    game.gameObjectsInstances[0].y -= 10;
                    break;
                case 'A':
                    game.gameObjectsInstances[0].x -= 10;
                    break;
                case 'S':
                    game.gameObjectsInstances[0].y += 10;
                    break;
                case 'D':
                    game.gameObjectsInstances[0].x += 10;
                    break;
            }

        }
        */
    }
}

¿Estas Loco Viejo?¿Quieres hacer un Motor Gráfico?¿Un Juego? ¿Que ventajas tendrías al hacer esto con Visual Studio?Para saber de Game Loop deberias leer esto te servirá mucho : http://tutorials.jenkov.com/flex-tetris/overview-of-implementation.html" rel="external nofollow">http://tutorials.jenkov.com/flex-tetris/overview-of-implementation.htmlBueno con eso tendrias una idea, pero lo que estás intentando hacer es una pérdida de tiempo, aunque si necesitas mas ayuda yo no tengo problemas en darte una mano, ya que también tuve la misma loca idea de hacer algo como lo que estás haciendo... El resultado no es algo que te enorgullezca tanto.. Jajaja  

[quote author=francoe1 date=1452029363" data-ipsquote="" data-cite="francoe1" class="ipsQuote">¿Estas Loco Viejo?¿Quieres hacer un Motor Gráfico?¿Un Juego? ¿Que ventajas tendrías al hacer esto con Visual Studio?Para saber de Game Loop deberias leer esto te servirá mucho : http://tutorials.jenkov.com/flex-tetris/overview-of-implementation.html]http://tutorials.jenkov.com/flex-tetris/overview-of-implementation.htmlBueno con eso tendrias una idea, pero lo que estás intentando hacer es una pérdida de tiempo, aunque si necesitas mas ayuda yo no tengo problemas en darte una mano, ya que también tuve la misma loca idea de hacer algo como lo que estás haciendo... El resultado no es algo que te enorgullezca tanto.. Jajaja [/quote]De viejo nada que todavia tengo 15 añitos xDLa idea al principio era hacer un motor grafico 2D pero me estuve viendo unos videos para tener una referencia y en una tarde consegui hacerlo (aunque aun habria que mejorarlo un poco) asi que decidi intentar hacer un juego entero junto con un mini-GameEnigneY ventajas de Visual Studio... Que es el IDE que conozco y llevo bastante tiempo usandolo, sinceramente no hay ningun otro motivo xDYa sabia que era una perdida de tiempo xD solo lo hago a modo de reto personal Muchas gracias por ese tutorial me ha sido de ayuda, por cierto, consegui hacer que funcionara la parte del codigo del GameForm_KeyDown asi que puedo empezar con la clase Input a partir de ahi


Etiquetas: