Recursos para aprender a programar

4036 сообщений, 135 страниц:  1; 120 121122 123 124; 135 ↖ Вернуться к списку тем

счёт: +38

3631. dhegwork-adakly,

Tremendo, por lo que entiendo tiene multihilo. Solamente eso ya es un gran paso. Me queda probar el audio y por lo que leo aquí es muy bueno.

счёт: +0

3632. Angel_R05,

Sí, el audio es bastante bueno, ya lo probé.
Sugerencia, por mientras para poder usar esto sin que tire el error de internet_request queda comentar las funciones url_get y url_post en bgt_compat, ya con eso funciona bien, igual cualquier cosa ya abrí la issue en el repo, toca esperar.

счёт: +0

3633. Harry_Dresden,

Otro que necesita aprender v s code y markdown. Estoy siguiendo unos cursos y bamos a necesitar Markdown, pero no tengo ni idea de como ejecutarlo con al extención que indican en el v s code. Sumando a que en v s code apenas se crear archivos fiables, no tengo idea de nada.
Consejos, alludas, pags, algo?

счёт: +0

3634. dhegwork-adakly,

El dynamic menu tampoco funciona, parece que por el joystic.

счёт: +0

3635. Dherhion,

Esto es brutal. Si hubiera programadores con ganas me molaría mucho hacer un audiojuego online, ahora que hay un motor que gestiona el audio que es una maravilla y que el tema de moverse por mapas está también resuelto. Tengo mis ideas, pero me falta el tiempo para hacerlo yo solo xD

счёт: +0

3636. dhegwork-adakly,

De qué tipo de audiojuego estamos hablando?

счёт: +0

3637. Dherhion,

Algo parecido a DMNB.

счёт: +0

3638. GingerFox,

he logrado compilar un jueguillo de bgt a nvgt. Está en tiflojuegos, se llama hack.

счёт: +0

3639. dhegwork-adakly,

Probé el form comentando las funciones que dan el error y funciona perfectamente. Está muy bueno.

счёт: +0

3640. Fluttershy,

yo me sumo si es que alguien quiere hacer un juego ahora. lo único que me falta por ver, es el tema de las clases y arrais.

счёт: +0

3641. Angel_R05,

Yo estoy empezando a echarle un ojito al código interno del motor y uno aprende cosas interesantes, ya voy viendo cómo usar sqlite3 nomás de ver los encabezados c++ y es genial.
Igual yo ya ando con una idea para un audiojuego online y 3D obviamente, toca ver qué procede con un compa y ver si se le sigue aquí y no en Python como habíamos pensado desde un inicio.

счёт: +0

3642. Dherhion,

Yo seguiría recomendando Python por si las moscas.
Es verdad que esto tiene muchísimo potencial, pero al final no deja de ser un motor escrito para ciegos en un lenguaje poco conocido.

счёт: +0

3643. Angel_R05,

Y sí, ahí tienes razón, la cuestión es que en Python toca reinventar mucho la rueda para algo que está hecho para ciegos en sí. Obviamente para un proyecto grande/diferente de lejos escogería Python, pero para algo un poco más tranqui me quedaría con este motor sin chistar.

счёт: +0

3644. el-inadaptado,

está interesante, se ve mejor que ngt que era lo otro que había. tendría que echarle un ojo a los 2 aver cual es más fácil de usar desde la perspectiva de alguien que no a programado algo en su vida, claro.

Delicious_icecream: he logrado compilar un jueguillo de bgt a nvgt. Está en tiflojuegos, se llama hack.: hace 41 minutos.
puedes compartir el resultado?

счёт: +0

3645. Dherhion,

sigo flipando con el sistema de audio binaural de esta mierda. es que es facilísimo de usar.

счёт: +0

3646. GingerFox,

solo diré una cosa. Con esto, podemos darle adiós definitivamente a bgt. La era de los clones bgt se puede dar por terminada, por fin, ahora que hay un lenguaje mejor.

счёт: +0

3647. sukil,

Tendremos clones BGT hechos en NVGT?

счёт: +0

3648. Dherhion,

sí. Más que nada porque los juegos bgt funcionan en nvgt sin mucho esfuerzo.
Serán la misma mierda mal programada con un motor más potente.

счёт: +0

3649. sukil,

Ahora parece que hay dos motores compitiendo. Por un lado, el un poco más viejo NGT, y por otro este. Según he leído en su página de About, NGT parece estar bien documentado (aunque también sé que uno en esas páginas puede decir misa) y NVGT falla en ese punto. NGT también parece tener audio 3D, así que será interesante compararlos. Aunque al menos de momento no creo que yo me anime a hacerlo, no tengo imaginación (ni técnica) para hacer juegos. ¿Alguien ha hecho pruebas con los dos y nos puede contar?

счёт: +0

3650. Dherhion,

Esto es brutal, lo encontré en el Discord de NVGT.
Es un poco lo que usa stw. Imaginad crear un npc y desde el cliente programarle una forma de actuar específica.
Permite ejecutar código nvgt desde dentro de NVGT.
//NVGT console
//Do you want to know what a particular function does without having to write scripts to test it? Do you want to debug or test fast? Here is a simple editor with a couple of extra features for you to do any small tasks you might need to do with nvgt
//During the testing phase, do not give this out, as it gives full access to nvgt...
//written by (what are we? NVGT test team, I guess?)

//this is the compiler that I recommend using for this particular file. As you can see, we use the c_boxed compiler; c includes the angelscript compiler which is required for subscripting to work, and boxed makes sure all required dlls are included within the output exe file

pragma stub c_boxed

include "nvgt_subsystems.nvgt" //for subscripting

include "form.nvgt"

//put these at the start and things work better for some reason, so here goes. Maybe they should just be included in form.nvgt. Well, anyway, on we go

void speak(string text, bool interrupt=false, bool translate=false){
screen_reader_speak(text, interrupt);
}
void stop_speech(){
screen_reader_silence();
}
class simple_nvgt_console{
audio_form f;
int loglist;
void main(){
script_module@ console_environment = script_get_module("console_environment", 1);
console_environment.set_access_mask(NVGT_SUBSYSTEM_EVERYTHING);
show_window("Simple NVGT Console");
f.create_window();
//why not just f.create_window? Because otherwise it speaks the title twice, and we don't want that; this happens
//because this is the first and only window we're even making
int txt=f.create_input_box("&Code", multiline: true);
int btn=f.create_button("&Run", primary: true);
loglist=f.create_list("&log (add to log with log(string text, bool silent=false)");
while(true){
wait(5); //always wait or your programs die
f.monitor();
if(f.is_pressed(btn)){
console_environment.add_section("imports", "import void log(const string&in text, const bool&in silent=false) from \"nvgt_game\";");
console_environment.add_section("<console>", "void console(){"+f.get_text(txt)+"}");
string[] errors;
if(console_environment.build(errors)<0){
info_box("Compilation error","information", join(errors, "\r\n\r\n"));
continue;
}
errors.resize(0);
console_environment.bind_all_imported_functions();
script_function @console_function=console_environment.get_function_by_name("console");
console_function({}, errors);
if(errors.length()>0)
info_box("Run-time Error","information", join(errors, "\r\n\r\n"));
}
if(key_pressed(KEY_F4) && (key_down(KEY_LALT)||key_down(KEY_RALT)) || key_pressed(KEY_ESCAPE))
exit();
}
}
void log(const string&in text, const bool&in silent=false){
if(!silent)
screen_reader_speak(text, false);
f.add_list_item(loglist, text);
}
}
simple_nvgt_console c;
//compiler entry point calls main in the class
void main(){
c.main();
}
//As far as I know, we can't bind class methods to other modules, so we'll have to do this instead
void log(const string&in text, const bool&in interrupt=false){
c.log(text, interrupt);
}

счёт: +0

3651. GingerFox,

esto implica el nacimiento de "depuradores" para nvgt.

счёт: +0

3652. Dherhion,

aunque es un posible uso, eso ya existe. Está documentado.

счёт: +0

3653. Arash,

Oigan, ¿Cómo usa Nvgt los if? Es que no veo que tengan llaves y no entiendo como se encierran, como sabe qué es qué, ETC. ¿Alguien me lo explica, por favor?

счёт: +0

3654. Dherhion,

Usan llaves sin mucho problema.
Por cierto redescargad y reinstalar, se ha solucionado el tema de internet_request

счёт: +0

3655. Angel_R05,

Los clones puede que estén ahora en nvgt sí, pero van a tener algunas dificultades porque no van a tener ni puta idea de qué es bgt_compat o algo así. Ayer estaba convirtiendo un código justamente y me saltó un error gigante por usar length y no length() como método, pero bueno ya quedó.
Respecto a ese form para correr código, vamo a probarlo a ver qué tal, tiene buena pinta.

счёт: +0

3656. Yostein-san,

Hola, a raíz de que hablaran del motor bgt y su variante, he recordado que hace unos días pedí permiso para hacerles saber de un editor de juego de origen chino.
Este editor, les permite crear su juego con funciones flexibles para ambas exigencias, el de poder crear el juego sin conocimiento de programación y novatos; por otro lado, funciones que permita escribir comandos y variables para desarrolladores avanzados.
Por el momento, dicen que esta en sus primeros desarrollos y que planean aparte de implementar más actualizaciones, traducciones de sus documentos chinos al ingles.
Por ese descubrimiento, quería ver si esto puede dar más apoyo para su uso, y que pueda si es posible, dar seguimiento para aquellos que estén interesados.
El link al foro de origen, junto con los links que lleva al programa y su comunidad de discord:
https://forum.audiogames.net/topic/52749/streamer-game-editor-make-game-development-easy-for-everyone/

счёт: +0

3657. Dherhion,

He tenido que ir a las fuentes, pero... ¡Esto incluye la clase de mapas para survive!
No hay documentación pero la habrá.
De momento, si quereis trastear...
Documentación para Crear y Manejar Mapas en NVGT
Introducción
En NVGT, los mapas se manejan utilizando las clases coordinate_map y coordinate_map_area. Estas clases permiten definir áreas en un espacio tridimensional, asignarles propiedades específicas y realizar operaciones como verificar colisiones y restricciones de movimiento.
Clases Principales
coordinate_map
Esta clase representa un mapa en NVGT y contiene varias áreas definidas dentro de él.
Métodos de coordinate_map
coordinate_map@ coordinate_map()
• Constructor para crear un nuevo mapa.
coordinate_map_area@ add_area(float minx, float maxx, float miny, float maxy, float minz, float maxz, float rotation, any@ primary_data, const string&in data1, const string&in data2, const string&in data3, int priority, int64 flags)
• Añade un área al mapa.
• Parámetros:
minx, maxx: Coordenadas mínimas y máximas en el eje X.
miny, maxy: Coordenadas mínimas y máximas en el eje Y.
minz, maxz: Coordenadas mínimas y máximas en el eje Z.
rotation: Rotación del área.
primary_data: Datos adicionales asociados al área.
data1, data2, data3: Cadenas adicionales para almacenar datos específicos.
priority: Prioridad del área.
flags: Flags asociados al área.
coordinate_map_area@[]@ get_areas(float x, float y, float z, float d = 0.0, coordinate_map_filter_callback@ filter_callback = null, int64 flags = 0, int64 excluded_flags = 0) const
• Obtiene las áreas en una posición específica.
• Parámetros:
x, y, z: Coordenadas de la posición.
d: Distancia opcional para buscar áreas en un rango.
filter_callback: Callback opcional para filtrar áreas.
flags, excluded_flags: Flags para incluir/excluir áreas.
coordinate_map_area@[]@ get_areas(float minx, float maxx, float miny, float maxy, float minz, float maxz, float d = 0.0, coordinate_map_filter_callback@ filter_callback = null, int64 flags = 0, int64 excluded_flags = 0) const
• Obtiene las áreas en un rango específico.
• Parámetros:
minx, maxx: Coordenadas mínimas y máximas en el eje X del rango.
miny, maxy: Coordenadas mínimas y máximas en el eje Y del rango.
minz, maxz: Coordenadas mínimas y máximas en el eje Z del rango.
d: Distancia opcional para buscar áreas en un rango adicional.
filter_callback: Callback opcional para filtrar áreas.
flags, excluded_flags: Flags para incluir/excluir áreas.
coordinate_map_area@ get_area(float x, float y, float z, int max_priority = -1, float d = 0.0, coordinate_map_filter_callback@ filter_callback = null, int64 flags = 0, int64 excluded_flags = 0) const
• Obtiene una sola área en una posición específica, basado en la prioridad.
• Parámetros:
x, y, z: Coordenadas de la posición.
max_priority: Prioridad máxima del área a buscar.
d: Distancia opcional para buscar áreas en un rango.
filter_callback: Callback opcional para filtrar áreas.
flags, excluded_flags: Flags para incluir/excluir áreas.
void reset()
• Resetea el mapa, eliminando todas las áreas.
coordinate_map_area
Esta clase representa un área dentro de un mapa.
Propiedades de coordinate_map_area
const coordinate_map@ map: Referencia al mapa al que pertenece el área.
const float minx: Coordenada mínima en el eje X.
const float maxx: Coordenada máxima en el eje X.
const float miny: Coordenada mínima en el eje Y.
const float maxy: Coordenada máxima en el eje Y.
const float minz: Coordenada mínima en el eje Z.
const float maxz: Coordenada máxima en el eje Z.
const float rotation: Rotación del área.
any@ primary_data: Datos adicionales asociados al área.
const string data1: Cadena adicional 1.
const string data2: Cadena adicional 2.
const string data3: Cadena adicional 3.
const int priority: Prioridad del área.
const bool framed: Indica si el área está enmarcada.
int64 flags: Flags asociados al área.
Métodos de coordinate_map_area
void unframe()
• Desenmarca el área del mapa.
void reframe()
• Reenmarca el área en el mapa.
void set(float minx, float maxx, float miny, float maxy, float minz, float maxz, float rotation)
• Establece nuevas coordenadas y rotación para el área.
void set_area(float minx, float maxx, float miny, float maxy, float minz, float maxz)
• Establece nuevas coordenadas para el área.
void set_rotation(float rotation)
• Establece una nueva rotación para el área.
bool is_in_area(float x, float y, float z, float d = 0.0, coordinate_map_filter_callback@ filter_callback = null, int64 flags = 0, int64 excluded_flags = 0) const
• Verifica si un punto específico está dentro del área.
• Parámetros:
x, y, z: Coordenadas del punto a verificar.
d: Distancia opcional para buscar en un rango adicional.
filter_callback: Callback opcional para filtrar áreas.
flags, excluded_flags: Flags para incluir/excluir áreas.
Ejemplo de Uso
Crear un Mapa con Áreas y Restricciones de Movimiento
cpp
Copiar código
void main() {
// Crear el mapa
coordinate_map@ map = coordinate_map();

// Datos adicionales para áreas transitables y no transitables
any@ walkableData = any("walkable");
any@ nonWalkableData = any("non_walkable");

// Añadir la zona de naves (transitable)
coordinate_map_area@ naves = map.add_area(0.0, 4.0, 0.0, 4.0, 0.0, 0.0, 0.0, walkableData, "Zona de naves", "", "", 1, 0);

// Añadir las escaleras debajo de la zona de naves (transitable)
coordinate_map_area@ escaleras = map.add_area(0.0, 4.0, 0.0, 4.0, -1.0, -1.0, 0.0, walkableData, "Escaleras", "", "", 1, 0);

// Añadir el cuadrado debajo de las escaleras que termina en una puerta (transitable)
coordinate_map_area@ cuadrado = map.add_area(0.0, 4.0, 0.0, 4.0, -2.0, -2.0, 0.0, walkableData, "Cuadrado con puerta", "", "", 1, 0);

// Añadir las paredes (no transitables)
coordinate_map_area@ pared_izquierda = map.add_area(0.0, 0.0, 0.0, 4.0, 0.0, -2.0, 0.0, nonWalkableData, "Pared izquierda", "", "", 1, 0);
coordinate_map_area@ pared_derecha = map.add_area(4.0, 4.0, 0.0, 4.0, 0.0, -2.0, 0.0, nonWalkableData, "Pared derecha", "", "", 1, 0);
coordinate_map_area@ pared_trasera = map.add_area(0.0, 4.0, 4.0, 4.0, 0.0, -2.0, 0.0, nonWalkableData, "Pared trasera", "", "", 1, 0);
coordinate_map_area@ pared_frontal = map.add_area(0.0, 4.0, 0.0, 0.5, 0.0, -2.0, 0.0, nonWalkableData, "Pared frontal", "", "", 1, 0);

// Ejemplo de movimiento
float new_x = 2.0;
float new_y = 2.0;
float new_z = 0.0;

if (can_move_to(map, new_x, new_y, new_z)) {
print("Movimiento permitido a (" + new_x + ", " + new_y + ", " + new_z + ").\n");
} else {
print("Movimiento no permitido a (" + new_x + ", " + new_y + ", " + new_z + ").\n");
}
}

bool can_move_to(coordinate_map@ map, float x, float y, float z) {
coordinate_map_area@[] areas = map.get_areas(x, y, z);
for (uint i = 0; i < areas.length(); i++) {
any@ areaData = areas[i].primary_data;
string areaType;
areaData.retrieve(areaType);
if (areaType == "non_walkable") {
return false; // No se puede mover a esta área porque no es transitable
}
}
return true; // Todas las áreas son transitables
}

счёт: +0

3658. Angel_R05,

Esa doc la hiciste viendo el source?
Por otro lado, en el repo sam dejó un script el cual menciona cómo funciona en sí lo de la ejecución de código en tiempo real, pueden encontrarlo en nvgt>test>quick>subscripting_example.nvgt

счёт: +0

3659. Dherhion,

Ajá. Source y chatgpt.

счёт: +0

3660. Rayo,

qué onda sale hacer un gpt personalizado con la doc y el código

счёт: +0

4036 сообщений, 135 страниц:  1; 120 121122 123 124; 135 ↖ Вернуться к списку тем

Ответить на тему

Чтобы писать на форуме, вам нужно сначала войти.

Забыли пароль? Создать учётную запись