Ir al contenido

publicidad
publicidad

Foto

¿Quieres aprender a hacer un videojuego? Entra aqui.


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
137 respuestas en este tema

#106

Escrito 13 mayo 2010 - 23:40

Que esta mal?
El codigo MAIN seria el Game1.Cs se llama igual todo igual...


No se me ocurre nada pero ¿puedes poner el código de tu clase Game1?. Es más, si quieres pon todo el código, lo compilo y lo ejecuto a ver si puedo resolver la excepción.

A ver si viene alguien que sepa más que nosotros para resolvernos las dudas.

  • vanche

  • Methuselah

  • vida restante: 100%
  • Registrado: 01 feb 2009
  • Mensajes: 196
#107

Escrito 14 mayo 2010 - 01:28

Ok el codigo de la clase Game1.cs es este;
[code:1]
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace DibujandoSplines
{

public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
private Texture2D nave;
private Vector2 pos;
private Texture2D backgroundTexture;

public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";//Directorio Raiz de contenidos
this.graphics.IsFullScreen = true;
this.graphics.PreferredBackBufferWidth = 800;
this.graphics.PreferredBackBufferHeight = 600;
}

protected override void Initialize()
{
Window.Title = "Race-Space";
pos = new Vector2(400, 550);


base.Initialize();
}

protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
nave = Content.Load("nave");
backgroundTexture = Content.Load("estrellas");


}

protected override void UnloadContent()
{

}
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (Keyboard.GetState().IsKeyDown(Keys.Escape))
this.Exit();

// TODO: Add your update logic here
if (Keyboard.GetState().IsKeyDown(Keys.Left))
pos.X -= 5;
if (Keyboard.GetState().IsKeyDown(Keys.Right))
pos.X += 5;
if (Keyboard.GetState().IsKeyDown(Keys.Up))
pos.Y -= 5;
if (Keyboard.GetState().IsKeyDown(Keys.Down))
pos.Y += 5;
if (Keyboard.GetState().IsKeyDown(Keys.Z))
pos.X += 10;
if (Keyboard.GetState().IsKeyDown(Keys.X))
pos.Y -= 10;

}


///
/// This is called when the game should draw itself.
///

/// Provides a snapshot of timing values.
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

//TODO:Add your drawing code here
spriteBatch.Begin();
spriteBatch.Draw(backgroundTexture, new Rectangle(0, 0,
graphics.GraphicsDevice.DisplayMode.Width,
graphics.GraphicsDevice.DisplayMode.Height),
Color.White);
spriteBatch.End();
spriteBatch.Begin();
spriteBatch.Draw(nave, pos, Color.White);
spriteBatch.End();


base.Draw(gameTime);
}
}
}
[/code]

Espero que me resuelvas esta duda...

Luego explico otra

  • Zeigon

  • Zodiark

  • vida restante: 100%
  • Registrado: 06 oct 2004
  • Mensajes: 1.225
#108

Escrito 14 mayo 2010 - 01:51

A ver, vanche, el problema que tienes te lo está diciendo el compilador. No encuentra la clase Game1 en esa línea, por qué?

Mira los namespaces de ambos archivos (program.cs y game1.cs).
En program.cs tienes puesto Run_Scape y en el otro has puesto DibujandoSplines, con lo cual, pues no va a encontrar la clase Game1 nunca.

Piensa en los namespaces como contenedores de clases. Si desde program.cs llamas a la clase Game1, tienes que especificarle dónde está esa clase. En tu caso está en DibujandoSplines.

Puedes hacer dos cosas, entonces: O renombras DibujandoSplines a Run_Scape, o si quieres mantener los dos nombres diferentes, en Program.cs tendrás que añadir otra línea "using" debajo de la que ya hay y que sea así: "using DibujandoSplines;"

No voy a ponerme a explicar qué son o para que sirven los namespaces pero os diría que leyérais algún manual de c# antes de hacer cosas de estas. Y no digo que os hagáis profesionales de c#, digo que sepáis lo suficiente como para detectar errores tan tontos como este y saber por qué ocurren. De verdad que ayuda el saber cómo funciona un lenguaje.
Si queréis seguir intentando hacer cosas, pues nada, a por ello.

  • Nikayuri

  • Magus

  • vida restante: 100%
  • Registrado: 14 mar 2008
  • Mensajes: 7.121
#109

Escrito 14 mayo 2010 - 09:30

Aunque no se nada de este mundillo en el que quiero meterme, pues todavia no me he metido, voy a estudiar Ingenieria Informatica. Me dijeron que al final hay especializacion de sistemas o de gestion, ¿no? ¿Cual viene mejor para los videojuegos? (contando que al final no saquen el master en videojuegos, claro)

Y una sugerencia para vuestro juego: Las flechas.

Vale, se que en muchos juegos se usan las flechas para mover al personaje, ¿pero no podeis poner la opcion de W,S,D,A? O al menos un menu de configuracion para gente que, como yo, no tenemos esas flechas en funcionamiento (se me estropearon y solo funcionan dos XD) y podamos cambiarlo.

Me meteria en el proyecto, pero como he dicho antes, de programacion cero... ni me se codigos ni nada...

Aunque hace un tiempo estuve haciendo juegos (mejor dicho niveles) del Tomb Raider, nada sorprendente, pero algo saque, sip. Use el DXtre3d.

  • Ellolo17

  • Zodiark

  • vida restante: 100%
  • Registrado: 16 nov 2006
  • Mensajes: 6.208
#110

Escrito 14 mayo 2010 - 11:39

Actualmente ya no hay eso de gestion o de sistemas. Ahora, con el plan bolonia, esta el grado de software y el de computadoras. Tu para hacer juegos metete en el de software. Luego a hacer el master.

Un saludo.

  • vanche

  • Methuselah

  • vida restante: 100%
  • Registrado: 01 feb 2009
  • Mensajes: 196
#111

Escrito 14 mayo 2010 - 14:50

Aaa gracias amigo zeigon, la verdad si ese es el error, mire menos que un siego XD
aver ahora voy a compilar y vuelvo...

PD: Es que yo uni 2 proyectos deve ser por eso..

EDITO:

Me sigue dando el error..

Para ser mas facil digo el error...
Me dice:

"Game1" es "espacio de nombres" pero se utiliza como variable

"Game1" es "espacio de nombres" pero se utiliza como tipo

El tipo de nombre Run no existe en el espacio de nombres

Y poniendo el cursos sobre Game1.Run()
Me dice:
Falta Microsoft.Xna.Framework.Game.Run()
Pero trate de agregar, editar y buscar pero no encontre nada

CODIGO:

[code:1]
using System;

namespace Run-Scape
{
static class Program
{
///
/// The main entry point for the application.
///

static void Main(string[] args)
{
using (Game1 = new Game1())
{
Game1.Run();
}
}
}
}
[/code]

Necesito ayuda!

  • Zeigon

  • Zodiark

  • vida restante: 100%
  • Registrado: 06 oct 2004
  • Mensajes: 1.225
#112

Escrito 14 mayo 2010 - 21:47

El error que te debe dar es porque ahora has cambiado algo en el otro archivo. Te diría que pusieras el código de nuevo. Ojalá se pudieran adjuntar TXTs en el foro.

  • VaNeSaN18

  • Antediluvian

  • vida restante: 100%
  • Registrado: 18 oct 2009
  • Mensajes: 222
#113

Escrito 14 mayo 2010 - 22:24

Por fin me doy a conocer XD. Soy VaNeSaN18 la novia de Underclass Hero.

Yo estoy interesada en la parte grafica, de echo me estoy haciendo tutoriales de 3d max 6 y 3d max 9 y tambien alguno de photoshop. No penseis que me eh borrado del proyecto ni nada solo que no entraba mucho en meri pero ahora lo hago todos los dias... asi que para cualquier cosa me mandáis un MP.

Saludos

  • vanche

  • Methuselah

  • vida restante: 100%
  • Registrado: 01 feb 2009
  • Mensajes: 196
#114

Escrito 15 mayo 2010 - 02:45

XD hola vanesa , bienvenida...la verdad que a mi tambien me gusta el diseño grafico...Bueno voy al tema para terminar lo que ago..

Otro problema..
Siguiendo el tutorial de tu novio,el de space invasion me trabe XD..

De la clase Nave.cs me da error el ultimo codigo de draw..pongo el codigo completo de nave.cs para que vean mejor
[code:1]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace Atack_Space
{
class Nave
{
#region Atributos

private Vector2 pos;
private Texture2D textura;


private Disparo disp;
private Texture2D texturaDisparo;

#endregion

#region Propiedades

public Vector2 Posicion
{
get { return pos; }
set { pos = value; }

}

public Texture2D Textura
{
get { return textura; }
set { textura = value; }
}

public Texture2D TexturaDisparo
{
get { return texturaDisparo; }
set { texturaDisparo = value; }
}
#endregion

#region Metodos
public Nave()
{
pos = new Vector2(400, 550);
}
public void actualiza()
{
if (Keyboard.GetState().IsKeyDown(Keys.Left))
{
if (pos.X > 0)
pos.X -= 5;
}
if (Keyboard.GetState().IsKeyDown(Keys.Right))
{
if (pos.X + textura.Width < 800)
pos.X += 5;
}
if (Keyboard.GetState().IsKeyDown(Keys.Up))
{
if (disp == null)
disp = new Disparo(new Vector2(pos.X + textura.Width / 2, pos.Y), texturaDisparo);
}
if (disp != null)
{
if (disp.Vivo)
disp.actualiza();
else
disp = null;
}
}

public void Draw(SpriteBatch bacht)
{
bacht.Draw(textura, pos, Color.White);

if (disp != null)
{
bacht.Draw(disp.Textura, disp.Posicion, Color.White);
//Esto me da el error en disp.Posicion
}
}
#endregion


}
}
[/code]
Si me solucionan esto ya puedo pasar al siguiente nivel..Agregar enemigos con vida, y los menus que no estan en su tuto XD

#115

Escrito 15 mayo 2010 - 15:32

Haces un spritebatch.Begin() antes de llamar al metodo Draw de nave? Si no haces el Begin() y el End() no funciona

  • vanche

  • Methuselah

  • vida restante: 100%
  • Registrado: 01 feb 2009
  • Mensajes: 196
#116

Escrito 15 mayo 2010 - 15:41

Haces un spritebatch.Begin() antes de llamar al metodo Draw de nave? Si no haces el Begin() y el End() no funciona


En la clase game1.cs, pues si llamo a nave.draw mira:

[code:1]
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);

// TODO: Add your drawing code here
spriteBatch.Begin();
spriteBatch.Draw(backgroundTexture, new Rectangle(0, 0,
graphics.GraphicsDevice.DisplayMode.Width,
graphics.GraphicsDevice.DisplayMode.Height),
Color.White);
spriteBatch.End();
spriteBatch.Begin();
nave.Draw(spriteBatch);
spriteBatch.End();

base.Draw(gameTime);
}
[/code]
(esa es la clase Game1.cs

y si te refieres a Nave.cs asi:

Declare el metodo Draw
[code:1]
public void Draw(SpriteBatch bacht)
{
bacht.Draw(textura, pos, Color.White);

if (disp != null)
{
bacht.Draw(disp.Textura, disp.Posicion, Color.White);
}
}
[/code]
(hay tendria que ir bacht.begin()..porque poniendo SpriteBacht esta declarado a bacht)

Saludos y espero que ayuden gracias

EDITO: (agrege y queda asi)

[code:1]
public void Draw(SpriteBatch bacht)
{
bacht.Begin();
bacht.Draw(textura, pos, Color.White);
if (disp != null)
{
bacht.Draw(disp.Textura, disp.Pocision, Color.White);
}
bacht.End();
}
[/code]

Pero sigue quedando mal... y en Game1.cs, tambien no funciona

#117

Escrito 15 mayo 2010 - 15:49

Deja el codigo de Game1.cs asi, no hace falta ir abriendo y cerrando el spritebatch cada vez que dibujas.

[code:1]
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);

// TODO: Add your drawing code here
spriteBatch.Begin();

spriteBatch.Draw(backgroundTexture, new Rectangle(0, 0,
graphics.GraphicsDevice.DisplayMode.Width,
graphics.GraphicsDevice.DisplayMode.Height),
Color.White);
nave.Draw(spriteBatch);

spriteBatch.End();

base.Draw(gameTime);
}
[/code]

Que error te da? Se un poco mas descriptivo, porque solo con decir que no te va....
Me huelo que no cargas la textura de la nave y por eso te peta, pero claro....no lo se.

Puedes pegar aqui el mensaje de error?

  • vanche

  • Methuselah

  • vida restante: 100%
  • Registrado: 01 feb 2009
  • Mensajes: 196
#118

Escrito 15 mayo 2010 - 16:09

Ya lo solucione, era un problema con la textura de la nave XD como dices tu, y con el fondo pero modifique el codigo en NAVE.CS y en GAME.CS para que tenga otras teclas especiales para moverse mas rapido

Estos son:
[code:1]
publicamos el metodo Update
y escribo el codigo

if(Keyboard.GetState().IsKeyDown(Keys.A))
{
if (pos.X > 0) //No sale de la pantalla (Tu Tuto xD)
pos.X += 10;
}

if(Keyboard.GetState().IsKeyDown(Keys.S))
{
if (pos.X + textura.Width < 800) //Ya se! si la textura de la nave pasa ese limite vuelve?
pos.X -= 10; //Esto lo invente yo ..Re basico xD
}
[/code]

Saludos!

#119

Escrito 18 mayo 2010 - 14:32

Ya consigo cargar modelos tridimensionales y rotarlos con los cursores. Hoy me pondré con los archivos de texto:

StreamReader Class
StreamWriter Class

Suelo programar generando logs para ver el flujo de mi programa y esto me ayudará a saber más acerca de los métodos Draw() y Update().

Saludos.

    Underclass Hero

  • EXPULSADO
  • vida restante: 0%
  • Registrado: 14 mar 2009
  • Mensajes: 1.246
#120

Escrito 26 mayo 2010 - 09:48

Por qué se pone el recolector de basura de un objeto antes de instanciarlo?

Por ejemplo:
[code:1]
namespace Destructores {
class Objeto {
~Objeto(){
Console.WriteLine("Referencia liberada");
}
}

class DestructoresApp{
static voide Main(){
Objeto o=new Objeto();
Console.WriteLine("El objeto acaba de ser instanciado. Pulsa INTRO");
string a = Console.ReadLine();
o=null;
Console.WriteLine("La referencia acaba de ser destruida. Pulsa INTRO");
a = Console.ReadLine();
GC.Collect();
Console.WriteLine("Se acaba de ejecutar GC.Collect(). Pulsa INTRO");
a = Console.ReadLine();
}
}
}
[/code]
Porqué se llama al recolector de ese objeto (~Objeto(){ antes de instanciarlo) no se si me explico. Un saludo.


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad
publicidad