Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Error de tutorial

Iniciado por Taris, 08 de Octubre de 2009, 04:11:45 PM

« anterior - próximo »

Taris

Hola muy buenas
He posteado también en el foro oficial.
Tengo un problemilla y es que empecé hacer los tutoriales en vb.net de hecho estoy en el primero, lo tengo todo hecho pero cuando llega al comando backbuffer.Render() me sale nullreferenceexception he mirado los tutos de c# i me van correctamente incluso los he puesto en una estructura de archivos similar i continua fallando os pongo el codigo.
He ido haciendo pruebas sobre los archivos de textuar, por ejemplo cambiar nombre para ver si me decia filenotfoundexception i esto es correcto, creo que por la estructura de directorios no serà.

El caso es que hice un primer tutorial de solo mostrar la ventana, totalmente vacia i este si que va creo que el error es en el objeto cubo o malla.

Imports System.Windows.Forms
'referncias directx
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
'Referencias Jad engine
Imports JadEngine
Imports JadEngine.Scene
Imports JadEngine.Video
Imports JadEngine.Core
Imports JadEngine.Input
'Nota:*******************************************************************************************************
'Cuando sobreescribimos los metodos tenemos que comentar lo que devuelven los
'metodos padre ejemplo de la funcion IniGame tiene return MyBase.IniGame(form); Tenemos
'que devolver el valor que nosotros queramos si no si lo dejamos sin comentar devolveria
'el valor de la funcion padre i daria un error.
'Esto es para todas las funciones que sobreescribimos
'en este caso.
'************************************************************************************************************
Public Class Tuto01
    Inherits JApplication   
    'indicamos si la ayuda debe estar visible o no
    Dim showHelp As Boolean = True
    'El engine llama ha este metodo despues de haber creado el dispositivo
    Public Overrides Function InitGame(ByVal form As System.Windows.Forms.Form) As Boolean
        'Return MyBase.InitGame(form)
        ' Crea los objetos de texturas i fuentes
        Jad.AfterCreateDevice()
        'Carga las texturas por defecto, fuentes, sombras...
        Jad.LoadCreateInHouse()

        '*****************************Aquí iria el codigo para cargar i empezar la aplicación****************       
        'Nota importante en jad la distancia se mide en metros.       

        ' Creamos JMesh: este objecto contiene toda la informacion acerca de vertices e indices
        'en este ejemplo creamos un cubo de 3 metros de altura,anchura y profundidad.       
        Dim mallaCubo As JMesh
        mallaCubo = JMesh.CreateCube(3, 3, 3) 'New JMesh()       
        'Ahora utilizamos el objeto JMeshObject que contiene la informacion de las mallas y sus materiales para renderizar
        'No hace falta crear la malla porque ja lo hemos hecho
        Dim cubo As JMeshObject       
        cubo = Jad.Scene.MeshObjects.Create("cubo01", false)
        'asodiamos  la malla antes creada con el objeto malla
        cubo.Mesh = mallaCubo

        ' Creamos un array de materiales de un solo elemento.
        ' Es necesario un array porque las mallas pueden necesitar mas de un material o submaterial o subconfiguraciones:
        ' informacion para mas de 1 material.
        Dim material(1) As JMaterial
        material(0) = New JMaterial("tocho")
        'un material puede estar compuesto por varias capas, de modo que pueda contener diferentes efectos.
        'en este ejemplo nosotros usaremos solamente una capa
        'crear capa
        Dim capa As JMaterialLayer
        capa = New JMaterialLayer
        'añadimos la capa al material creado
        material(0).AddLayer(capa)
        'Configuramos la textura difusa. El engine detecta si la textura no existe y la carga.
        'Si existe, solo la referencia.
        'No debemos indicarle la extension del archivo. El engine la buscara las diferentes extensions hasta encontrar la textura.
        'Para buscar texturas el engines entrará en el directorio base/textures, y se movera recursibamente hasta encontrar
        'la textura. Gracias a esto, puedes crear subcarpetas para ordenar las texturas sin necesidad de cambiar el engine.
        capa.DiffuseMap.Texture = Jad.Video.Textures.Create2D("brick_d", True)
        'ajustamos el material al objetoMalla
        cubo.Material = material

        'Creamos una omni luz
        Dim luz As JOmniLight
        luz = CType(Jad.Scene.Lights.Create("lucecita", JLightType.Omni), JOmniLight)
        'ajustamos la posicion de la luz
        luz.Transform.Position = New Vector3(0, 0, -2.0F)
        'ajustamos intensidad de la luz
        luz.Multiplier = 1.0F
        'ajustamos tipo de atenuación de la luz
        luz.Attenuation.Type = JLightAttenuationType.DualRadius
        'ajustamos comienzo de la atenuacion
        luz.Attenuation.Start = 1.0F
        'ajustamos la distancia donde la luz esta completamenta atenuada
        luz.Attenuation.End = 2.0F
        'ajustamos color de la luz
        luz.Color = JColor.Yellow
        'hacemos que la luz afecte al componente difuso del material
        luz.AffectDiffuse = True
        'hacemos que la luz afecte al componente especular del material
        luz.AffectSpecular = True
        'quitamos sombras
        luz.CastShadows = False
        'Ponemos la luz ambiente
        Jad.Scene.Lights.Ambient = New JColor(0.4F, 0.4F, 0.4F)

        '****************************************************************************************************

        ' Cuando esta todo configurado encendemos el engine
        Jad.Begin()
        'Creamos una clase de entrada que controla el teclado i el raton
        Jad.CreateInput()

        Return True
    End Function

    'Este metodo se ejecuta cada frame y mira si se ha producido una
    'entrada(En este caso de teclado o raton)i ejecuta la accion en el juego
    Public Overrides Function Update() As Boolean
        'Return MyBase.Update()
        'Si la salida no fue creada devolvemos ok
        If Jad.InputDevices Is Nothing Then
            Return True
        End If
        ' Salir de la aplicación? Si han apretado la tecla ESC
        If Jad.Input.Keyboard(Key.Escape).Down Then
            Return False
        End If
        'ayuda
        If (Jad.Input.Keyboard(Key.F1).Pressed) Then
            showHelp = False
        End If

        ' Si todo esta correcto no salimos
        Return True
    End Function


    Public Overrides Sub Render()
        'MyBase.Render()
        'Las vistas estan renderizadas'windows'.El engine crea implicitamente
        'la vista,le 'subbuffer', por defecto.
        Dim backbuffer As JView = Jad.Video.Views(0)
        'Renderizamos la Jad.Scene usando la camara de escena
       
        backbuffer.Render()


        If showHelp Then
            'Obtenemos el acceso a la primera fuente. El engine crea una fuente por defecto
            Dim font As JFont = Jad.Video.Fonts(0)
            ' comienzo de la renderizacion de las fuentes
            Jad.Video.Fonts.Begin()
            ''Escribimos el texto en la primera linea, posicion x=0 i de color amarillo       
            font.RenderLine(Jad.Version + " Apreta ESC para salir", 0, JColor.Yellow)
            'Escribimos texto en la secunda linea, posicion x=0 de color blanco   
            font.RenderLine(Jad.Video.Views.CurrentView.Stats.Fps + " FPS", 0, JColor.White)
            'Final de la renderizacion de las fuentes
            Jad.Video.Fonts.End()
        End If
        'Mostramos lo que contiene el subbuffer.
        backbuffer.Present()
    End Sub

End Class


saludos

Vicente

Los tutoriales de VB.NET no se han seguido actualizando a la vez que los de C#, así que seguramente ahora mismo al tutorial le falta alguna cosa que sí hace el tutorial de C# y por eso da el error (lo mejor sería que "tradujeras" el tutorial de C# a VB.NET).






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.