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.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 :
Título: Duda con input en Visual C#
Publicado por: iRobb en Enero 07, 2016, 10:22:50 AM