Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Array mi dolor de cabeza :P

Iniciado por superbalgas, 09 de Febrero de 2011, 09:05:22 PM

« anterior - próximo »

superbalgas

she, estoy con mi proyecto game... (q original el titulo xD)...

mmm la onda del juego es, q sea online... y we... lo mas logico es q me estanque en la parte del Spawn :P

lo q logre hasta ahora, es tener otra aplicacion que hace de servidor, y el cliente q al conectarse, pide las coordenadas de las demas personas en el mapa...

hastá ahi todo bien :P

recibe todos los datos con coordenadas y sus respectivos ID :P

ahora mmm... como hago para q se clonen por ejemplo... pero de forma dinamica? osea, sin tener q declara 20 Personajes... xD me suena a array... xD

[EX3]

Obviamente tendrás que utilizar o Arrays o Colecciones si necesitas gestionar varios elementos de un mismo conjunto variable en cantidad. Estas ultimas, las colecciones, te resultaran mas cómodas que usar un array ya que los arrays tendrás que controlar el tamaño cada vez que quites o agregues elementos, las colecciones lo hacen de forma automática y te permitirán también asignar claves únicas a cada elemento, lo cual puede resultar muy útil para localizar una instancia concreta en la lista sin tener que recorrerla. Otra ventaja de las colecciones, puedes recorrerlas fácilmente usando un For Each.

Si trabajas, como Hechelion, en Visual Basic .NET (cosa que recomiendo lo recomiendo :P), utiliza las colecciones genericas, en concreto, un List<T> o un Dictionary<K, T> si necesitas asignar claves unicas a cada elemento.

Que estabas desarrollando exactamente, un RPG o similar? :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

superbalgas

#2
sep, un rpg :P...

hice unos juegos en 3D con otros motores xD, pero siempre quise hacer un juego asi re simple al estilo...
. . O
- - | - -
. . /\

xDD




y we... lo empese hace un año con esta libreria xD!... pero ahora tengo tiempo para terminarlo xD!

ahora estoy buscando info en la web, aver q onda con lo de List<T> y Dictionary<K, T> :P


Edit: mmmm hasta ahora lo q encontré, no lo entendí xD!.. sigo buscando :P


[EX3]

Un RPG, como no  ::) hay mas vida mas alla de los RPG, hombre :D (y juegos mas sencillos de hacer también ;))

Veo que es Visual Basic .NET lo que usas, genial pues, todo ventajas :) Los List<T> en VB.NET son List(Of tipo), que ultimamente con esto de programar en C# y XNA y voy olvidando la sintaxis de VB, raro sea que no haya metido algun ; al final de alguna instruccion o la // en los comentarios :P

Un breve ejemplo de como se usa una lista generica:
Dim listaObjetos As New List(Of MiClase)  ' Declaramos una lista generica que trabajara solo el tipo de dato MiClase.

listaObjetos.Add(New MiClase()) ' Agregamos, in line, una nueva instancia de MiClase.

listaObjetos(0).X = 0 ' Ponemos a 0 el valor de X del elemento 0 de la lista.

' Un For Each que recorra la lista y vaya incrementando en uno la coordenada X de MiClase:
For Each objeto As MiClase In listaObjetos
    objeto.X+=1
Next

listaObjetos.Remove(listaObjetos(0)) ' Elimina el elemento 0 de la lista.

listaObjetos.Clear() ' Vacia la lista por completo.

listaObjetos.Count '  Numero de elementos en la lista.


Luego puedes extender funcionalidades de las listas como son comparadores personalizados para poder utilizar el metodo Sort() de la lista para ordernar por un criterio que tu quieras (por ejemplo, por su cordenada Z de profunidad) o personalizar el metodo Find() para realizar busquedas concretas de elementos en tu lista y hacer varias cosas mas gracias a los genericos de .NET (menudo inventazo los tipos genericos!). Como veras no son muy complicadas de usar, rinden bien y son mejores que usar un Array, que igualmente en .NET son mil veces mas comodos que en Visual Basic 6.0, no hay color, vamos :)

Salu2...

P.D.: Por cierto, para los graficos, podrias usar alguna de las bibliotecas de sprites que hay por la red con tiles y animaciones de personales para RPG's, te ahorraria trabajo para el juego :)
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

superbalgas

Xd, con respecto a los gráficos, no hay problema :P estoy haciendo todo en 3D y capturando desde una cámara los Fotogramas y limpio las animaciones en el photoshop :P

emmm... ya entendi de forma variable lo de la lista... :P

es similar a los ListView... emmm... lo q no entendi bien es como meter...

Call PJ_Run.Draw(320, 240, 0, 0, True, , -2)

dentro de... listaObjetos(0)

:P

[EX3]

Cita de: superbalgas en 09 de Febrero de 2011, 10:24:23 PM
Xd, con respecto a los gráficos, no hay problema :P estoy haciendo todo en 3D y capturando desde una cámara los Fotogramas y limpio las animaciones en el photoshop :P
Pero eso si no tienes un grafista que se centre en eso es un trabajo de chinos, muchacho. Vas a programar y hacer los graficos en 3D tu solo? :o

Cita de: superbalgas en 09 de Febrero de 2011, 10:24:23 PM
es similar a los ListView... emmm... lo q no entendi bien es como meter...

Call PJ_Run.Draw(320, 240, 0, 0, True, , -2)

dentro de... listaObjetos(0)
Entiendo que Draw es un metodo de tu clase jugador o similar:
listaObjetos(0).Draw(320, 240, 0, 0, True, , -2)

listaObjetos(indice) es una referencia completa al elemento de la lista que corresponda con el indice que indiques. Seria igual que si hicieras lo siguiente:
PJ_Run = listaObjetos(0)
PJ_Run.Draw(320, 240, 0, 0, True, , -2)


PJ_Run tomaria la referencia del elemento 0 de la coleccion. Piensa en las listas como si fueran arrays de toda la vida pero hipervitaminados :)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

superbalgas

#6
xD! jajaja, estoy acostumbrado a hacer juegos solo :P lleva su tiempo, pero sale como uno quiere :P



xDDDDDD :P


ahora, con respecto a lo del dichoso codigo... :P

asi como un Neanderthal xD... logre hacer esto...

CitarDim listaObjetos As New List(Of PJ_Net)
           For index As Integer = 1 To UBound(ID_PJ)
               If index <> MyID Then
                   Dim DivCord = Split(ID_PJ(index), "-")
                   listaObjetos.Add(New PJ_Net())
                   listaObjetos(index).Draw(320, 240, 0, 0, True, , -2)
               End If
           Next

pero creo q List, no pertenece a vb 2005, x q me dice q no está definido... O.o

[EX3]

Los genéricos estan presentes desde la version 2.0 del Framework, osea, a partir de Visual Studio 2005. Mira que tengas hecho el Import de System.Collections.Generic, que de hecho te deberia venir por defecto al añadir una clase en tu proyecto:
http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

superbalgas

ahora si me agarró el List... xD me parecía raro que no lo identificará y q tampoco aparecía en la lista de definiciones del vb...

xD

lo mandé asi

CitarDim listaObjetos As New List(Of ClsAnim)
            For index As Integer = 1 To UBound(ID_PJ)
                If index <> MyID Then
                    Dim DivCord = Split(ID_PJ(index), "-")
                    listaObjetos.Add(New PJ_Net())
                    listaObjetos(index).Draw(DivCord(0), DivCord(1), 0, 0, True, , -2)
                End If
            Next

lo q hice ahí... es declarar q listaObjetos es una nueva list... de ClsAnim (la clase de Hechelion xD) y... hacer un bucle x cada personaje Online, y con un IF, q excluye al personaje controlado por el mismo cliente...

y.... dsp con uno split separo una coordenada previamente enviada desde el servidor.... yyyy....y.y.y.y. xD

dsp le pongo una nueva linea... q es donde supongo que tendria q declarar el PJ_Net, q seria equivalente a...

PJ.Init(Graphics, Sys, My.Application.Info.DirectoryPath & "\PJ_Idle.aad")

(lo duplique con clone() )...

y... dsp indico q se debe ejecutar la funcion Draw de dicha ListaObjetos.... con las coordenadas y parametros xD!...

esa seria la base...

ahora, retrosediendo unas lineas atras xD... listaObjetos.Add(New PJ_Net()), aca la pifeo, xD

osea...

seria asi...

Dim WithEvents PJ_Net As ClsAnim
Dim WithEvents PJ As ClsAnim

PJ = New ClsAnim
PJ_Net = New ClsAnim

Call PJ.Init(Graphics, Sys, My.Application.Info.DirectoryPath & "\PJ_Idle.aad")

PJ_Net = PJ.Clone()

--------------------------

Call PJ.Draw(320, 240, 0, 0, True, , -2)

y luego  va el código q puse arriba xD!

Salu2! :P y muchas gracias x la ayuda q me vas dando xD

superbalgas

#9
jajaja, muchas gracias che :P ya logre hacerlo andar xD!!!


   Dim listaObjetos As New List(Of ClsAnim)
   Dim ID_PJ(0) As String
   Dim MyID As String
   Dim WithEvents PJ As ClsAnim



  PJ = New ClsAnim
  Call PJ.Init(Graphics, Sys, My.Application.Info.DirectoryPath & "\PJ_Idle.aad")


           Dim Index2 As Integer = 0

           For index As Integer = 1 To UBound(ID_PJ)
               If index <> MyID Then
                   Dim DivCord = Split(ID_PJ(index), "-")

                   'MsgBox(index & " - " & ID_PJ(index) & " - " & DivCord(0) & "-" & DivCord(1))

                   listaObjetos.Add(New ClsAnim)

                   listaObjetos(Index2) = PJ.Clone()
                   If listaObjetos(Index2).AnimName <> "idle" Then Call listaObjetos(Index2).Play("idle", True)
                   listaObjetos(Index2).Draw(DivCord(0), DivCord(1), 0, 0, True, , -2)
                   Index2 += 1
               End If
           Next


Muahaha, muchas gracias por tu ayuda =P , nunca habia visto esto de las List, xD creo q lo voy a reemplazar x esto a los array xD


Click para agrandar



Por ahora estoy emulando clientes, osea... envio datos al cliente desde el servidor, como si estuviera otro cliente conectado xD!...
x q me embola abrir 2 clientes jajaj xD

lo raro es que no me hace la animacion idle xD!! ajaja xD

Hechelion


superbalgas

#11
Cita de: Hechelion en 12 de Febrero de 2011, 12:12:16 AM
Se ve bien. Para cuando un pueblo?

jajaja... emmm los mapas siempre los deje para el final xD!... primero me dedico a las animaciones y programación de los personajes...

obviamente siempre usé otros engines como, Genesis3D / RF /  y Unity xD!... q son un poco mas sensillos XD!

esto de hacerlo en VB, se me hace mucho mas Flexible, pero tambien un poco complicado xD!... es más, uso vb dsd hace unos cuantos años... y es la primera vez q veo lo del List xD!...

hay cosas q estoy aprendiendo con hacer este proyecto xD

PD: ya logre solucionar lo de las animaciones :P

meti 2 for, 1 q se encarga de cargar en la lista los nuevos Personajes cuando se conectan...

y otro for q se encarga de dibujar y animar los personajes x cada fotograma xD






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.