Lo del dopador automático en parte es cierto, de echo aun se puede utilizar solo que no deja comprar automáticamente por la vendedora que pusieron, en ese tiempo tuve 3 item con bonus perfectos y algún usuario (que no se quien fue) me acuso a los GM y me banearon, al parecer fui el único que lo hizo, respecto al yang también estaba el bugyang donde comprabas mas barato de lo que vendías y así me hice millonario, la ultima vez que entre después de la actualización y todo todavía se podía utilizar el bugyang. Todo esto no fue el primer día, como mínimo la primera semana.
Freyader (@Freyader)
Information about Freyader
Publicados por Freyader
-
-
Sprites y texturas
Vocabulario
La mayoría (si no todos) ya están familiarizados con estos dos objetos muy comunes, por ello los definiremos muy brevemente.
Una textura es una imagen. La llamamos textura por tiene un rol específico: está asignada a una entidad 2D.
Un sprite no es nada mas que un rectángulo con textura.
La explicación ha sido bastante corta, pero si aun no entiendes realmente lo que es un sprite y una textura, puedes encontrar información bastante detallada en internet.
Cargando una textura
Entonces, antes de crear cualquier sprite, necesitaremos tener una textura válida. La clase que integra una textura al programa en SFML, se llama, sopresivamente sf::Texture.
La forma mas común de cargar una textura es desde un archivo en el disco duro, esto se hace mediante la función loadFromFile.
sf::Texture texture;
if (!texture.loadFromFile("image.png"))
{
// error...
}La función loadFromFile a veces falla sin razon alguna. Primero, comprueba el mensaje de error que se muestra en el compilador. Si el mensaje es incapaz de abrir archivo (unable to open file), asegúrate que la imagen a cargar este en la misma carpeta en donde se crea tu ejecutable.
La función de carga desde archivo tiene un argumento opcional, que puede ser usado si quieres cargar una pequeña parte de la imagen.
//Carga un rectángulo de 32x32 que comienza en (10, 10)
if (!texture.loadFromFile("image.png", sf::IntRect(10, 10, 32, 32)))
{
// error...
}La clase sf::IntRect es utilidad simple que representa a un rectángulo. Este constructor toma las coordenadas partiendo en la esquina superior izquierda, y el tamaño del rectángulo.
Adicionalmente, una textura posee dos propiedades que cambian la forma en que es renderizada.
La primera propiedad permite suavisar la textura. Suavizar una textura hace que los pixeles de ella sean menos visibles (viéndose un poco mas borrosa), que en caso de que esté escalada puede ser importante.
texture.setSmooth(true);Cuando el suavizado interpola los pixeles adyancentes en la textura, puede que se den resultados no deseados mostrando pixeles fuera de la textura. Esto puede suceder cuando tu sprite se encuentra en coordenadas no enteras.
La segunda propiedad permite que se repita una textura dentro de un sprite.
texture.setRepeated(true);Esto solo funciona si tu sprite está configurado para mostrar un rectángulo que sea mucho mayor que la textura. De otra manera, esta propiedad no tendria efecto.
¿Puedo crear mi sprite?
Si, ahora puedes crear tu sprite.
sf::Sprite sprite;
sprite.setTexture(texture);Y finalmente dibujarlo.
//Dentro del game loop, entre window.clear() y window.display()
window.draw(sprite);Si no quieres que tu sprite muestre la textura completa, puedes configurar un rectángulo que será el que se mostrará dentro del sprite.
sprite.setTextureRect(sf::IntRect(10, 10, 32, 32));También puedes cambiar el color de un sprite. El color que se establece es multiplicado por el color de la textura. También puede ser usado para cambiar la transparencia del sprite.
sprite.setColor(sf::Color(0, 255, 0)); //Verde
sprite.setColor(sf::Color(255, 255, 255, 128)); //Mitad transparenteTodos estos sprites utilizan la misma textura, pero con un color diferente:
Los sprites también pueden ser transformados: ellos tienen una posición, una orientación y una escala.
//Posición
sprite.setPosition(sf::Vector2f(10, 50)); //Posición absoluta
sprite.move(sf::Vector2f(5, 10)); //Desplazamiento con respecto a la posición actual
//Rotación
sprite.setRotation(90); //Ángulo absoluto
sprite.rotate(15); //Desplazamiento con respecto al ángulo actual
//Escala
sprite.setScale(sf::Vector2f(0.5f, 2.f)); //Factor absoluto de escala
sprite.scale(sf::Vector2f(1.5f, 3.f)); //Factor relativo a la escala actualPor defecto, el punto origen para estas tres transformaciones es la esquina superior izquierda del sprite. Si quieres ajustar el punto de origen a otro distinto (por ejemplo el centro del sprite u otra esquina), puedes utilizar la función setOrigin.
sprite.setOrigin(sf::Vector2f(25, 25));Todas las funciones de transformación son comunes para todas las entidades de SFML, esto está explicado en un tutorial separado: Transformando Entidades.
-
Dibujando cosas en 2D
Introducción
Como has aprendido en los tutoriales anteriores, el módulo de ventanas de SFML provee una manera fácil de abrir y trabajar con ventanas, pero no ayuda a dibujar algo sobre ellas. Afortunadamente, SFML provee un módulo de gráficos que te ayudará a crear entidades en 2D.
La ventana de dibujo
Para dibujar entidades utilizando el módulo de gráficos, debes utilzar una clase especializada en ventanas: sf::RenderWindow. Esta clase deriva de sf::Window, y hereda todas sus funciones. Todo lo que has aprendido acerca de sf::Window (creación, manejo de eventos, controlar el framerate, etc.) es aplicable a sf::RenderWindow.
Además de eso sf::RenderWindow añade funciones de alto nivel para ayudar a crear cosas más facilmente. En este tutorial, nos centraremos en dos de esas funciones: clear y draw. Son tan simples como su nombre lo indica: clear, limpia toda la ventana con el color elegido, y draw, dibuja algún objeto en pantalla.
Esto es un típico game loop utilizando RenderWindow:
#includeint main()
{
//Crea la ventana
sf::RenderWindow window(sf::VideoMode(800, 600), "My window");
//Game loop
while (window.isOpen())
{
//Comprueba si se desencadenó algún evento
sf::Event event;
while (window.pollEvent(event))
{
//Si se requiere, cierra la ventana
if (event.type == sf::Event::Closed)
window.close();
}
//Limpia la ventana con color negro
window.clear(sf::Color::Black);
//Dibuja algo aquí
// window.draw(...);
//Actualiza la ventana
window.display();
}
return 0;
}Es obligación llamar a la función clear antes de dibujar algo, de otra manera quedarán pixeles sin definir del cuadro anterior. La única excepción es cuando cubres la pantalla por completo con un dibujo, de esa forma no quedarán pixeles sin definir; en este caso de igual forma puedes llamar a la función clear (aunque no será una diferencia muy notoria).
Llamas a la función display también es obligación, esta función toma lo que se dibujó desde la última llamada a la función display y lo muestra en la ventana. De echo, las cosas al ser dibujadas, no son dibujadas directamente en la ventana, estas van a un buffer oculto. Este buffer es copiado a la ventana cuando llamas a la función display (se conoce como double-buffering).
Este ciclo de funciones (clear-draw-display) es la única manera óptima de dibujar algo. No intentes de utilizar otras estrategias, como mantener pixeles del cuadro anterior, borrar pixeles, o dibujar una vez y llamando a la función display varias veces. Solo obtendrás resultados extraños debido al double-buffering.
Chipset modernos de gráficos están echos realmente para repetir este ciclo donde todo se actualiza completamente en cada iteración del game loop. No te asusten por ejemplo si dibujas 1000 sprites 60 veces por segundo, estas muy debajo de los millones de triángulos que un equipo común puede soportar.¿Que puedo dibujar ahora?
Ahora que tienes el game loop completo, estas listo para dibujar, veamos que y como puedes dibujar algo en tu ventana.
SFML provee de cuatro entidades dibujables: tres de ellas están listas para ser usadar (sprites, textos, formas), la última es el bloque constructor que te ayudará a crear tus propias entidades dibujables (vertex arrays).
Aunque comparten algunas propiedades en común, estas entidades tienen propiedades específicas y por ello merecen ser tratadas cada una por separado en otro tutorial.
-
Hola, pues eso estoy buscando a un grafista que pueda ayudarme con el desarrollo de un videojuego de tragamonedas básicamente es hacer el fondo, algunos contornos y las imágenes que se mostrarán en el juego.
Dejo una impresión de pantalla.
No quito la posibilidad de ofrecer algo en cambio.
-
Abriendo y trabajando con una ventana
Introducción
Este tutorial solo describe como abrir y trabajar con una ventana. Dibujar cosas esta fuera de este módulo. De igual manera leer este tutorial es de vital importancia para generar cualquier aplicación.
Abriendo una ventana
Las ventanas son definidas por la clase sf::Window. Una ventana puede ser creada y abierta directamente en la construcción:
#include
int main()
{
sf::Window window(sf::VideoMode(800, 600), "My window");
...
return 0;
}El primer argumento, VideoMode, define el tamaño de la ventana (el tamaño interno, sin la barra de título y los bordes). Aqui, hemos creado una ventana de 800x600 pixeles.
El segundo argumento es simplemente el nombre de la ventana.
Además este constructor acepta un tercer argumento opcional: el estilo, que nos dará a escoger la decoración y las características que buscas:
sf::Style::None : Sin decoración (útil para pantallas de inicio); este estilo no puede ser combinado con otros
sf::Style::Titlebar : La ventana posee una barra de título
sf::Style::Resize : La ventana puede ser cambiada de tamaño y posee un botón de maximizar
sf::Style::Close : La ventana tiene un botón de cerrar
sf::Style::Fullscreen : La ventana se muestra en modo pantalla completa; este estilo no puede ser combinado con otros
sf::Style::Default : El estilo por defecto (Titlebar, Resize y Close)
Si buscas crear la ventana despues de la instancia de construcción de sf::Window, o recrearla con un modo diferente de video o con otro título, puedes usar la función create que toma exactamente los mismos argumentos:
#include
int main()
{
sf::Window window;
window.create(sf::VideoMode(800, 600), "My window");
...
return 0;
}Trayendo la ventana a la vida
Si tratas de ejecutar el código de arriba sin colocar nada en el lugar de "...", dificilmente podrás ver algo. Primero, por que el programa termina inmediatamente. Segundo, por que no existe hay control de eventos, con lo que incluso añadiendo un bucle se verá una ventana muerta, incapaz de moverse o siquiera de cambiar tamaño.
Vamos a añadir un poco de código para que este programa sea mas interesante:
#includeint main()
{
sf::Window window(sf::VideoMode(800, 600), "My window");
//Bucle de aplicación
while (window.isOpen())
{
//Revisa si algun evento de sf::Window se ha activado
sf::Event event;
while (window.pollEvent(event))
{
//Si se solicita cerrar la ventana, esta se cierra
if (event.type == sf::Event::Closed)
window.close();
}
}
return 0;
}El código de arriba puede abrir una ventana, la termina cuando el usuario la cierra. Veamos como funciona en detalle.
Primero, hemos agregado un loop que se asegura que la aplicación se actualice hasta que la ventana se cierre. La mayoría (no todos) de los programas en SFML tienen este tipo de loop, a veces son llamados main loop o game loop.
Luego lo primera que hacemos dentro de nuestro game loop es ver si algún evento ha sido desencadenado. Noten que utilizamos un bucle while para que todos los eventos se procesen, en caso de que hubiera alguno pendiente. La función pollEvent devuelve true si un evento está pendiente, o false si no hay eventos pendientes.
Siempre que exista un evento desencadenado, debemos comprobar el tipo de evento (cerrar ventana, tecla pulsada, mouse en movimiento, joystick conectado) y reaccionar si esque estamos interesados en dicho evento. En este caso, solo nos preocupamos por el evento Event::Closed, que se desencadena cuando el usuario quiere cerrar la ventana. En este punto, la ventana esta aún abierta y tenemos que cerrarla de forma explícita con la función close. Esto permite hacer algo antes de que la ventana sea cerrada, como guardar el estado actual de la aplicacion, o mostrar un mensaje.
Despues que la ventana ha sido cerrada, el programa sale del game loop y termina.
Hasta ahora, probablemente te has dado cuenta que no hemos hablado acerca de dibujar algo en la ventana. Esto no es trabajo del modulo window, tendrás que saltar al modulo de gráficos si quieres dibujar algo como un sprite, textos o formas.
Por lo tanto, no esperes ver algo interesante en esta ventana: lo mas probable es que veas un color uniforme (negro o blanco).
Jugando con la ventana
Por supuesto, SFML te deja jugar un poco con la ventana creada. Existen operaciones basicas con la ventana, como cambiar el tamaño, la posicion, el título o el ícono.
// Cambia la posición de la ventana.
window.setPosition(sf::Vector2i(10, 50));
// Cambia el tamaño de la ventana
window.setSize(sf::Vector2u(640, 480));
// Cambia el título de la ventana
window.setTitle("SFML window");
// Obtiene el tamaño de la ventana
sf::Vector2u size = window.getSize();
unsigned int width = size.x;
unsigned int height = size.y;
...Controlando el framerate
A veces, cuando la aplicación se ejecuta, puedes notar defectos visuales como lagrimeos. La razón es que la frecuencia de actualización de tu aplicación no está sincronizada con la frecuencia vertical del monitos, y como resultado, la parte inferior de la trama se mezcla con la siguiente.
La solución a este problema es activar la sincronización vertical utilizando la función setVerticalSyncEnabled:
// Activa la sincronización, después de crear la ventana.
window.setVerticalSyncEnabled(true);Después de llamar esta función, tu aplicación correrá a la misma frecuencia del monitor, aproximadamente 60 cuadros por segundo.
-
Hola, una vez empecé a hacer una guía de cómo modificar el cliente, editar efectos, armas y demás. Ahora, quiero hacer algo parecido pero as sofisticado, quiero modificar el corazón del cliente, quiero agregar personajes, agregar clases, agregar una nueva raza.
El motivo del Metin2 que quiero hacer es hacer algo parecido a los juegos de Naruto que han salido últimamente y que son bastante usados.
Para ello necesito un cliente que no haya tenido modificación alguna, uno normal, con armaduras normales, con todo como corresponde.
¿Alguien sabe de alguno que pueda descargar?
-
@Anghios said:
Puedes editarlo con cualquier archivo de texto, pero te recomiendo que uses Notepad++
Baja el Notepad++ y arrastra el archivo .mse dentro de él.
^^
No es un archivo .mse es uno .mde esta en ymir work\effect\etc\levelup_1\e.mde por lo que pude investigar da efectos al parecer en 3D pero no se como abrirlos
-
Alguien tiene alguna idea de como abrir, ver, crear o editar un archivo .mde (Mesh file) ??
desde ya muchas gracias
-
@Gabiiiii said:
Bastante buena, la seguiré de cerca...
Gracias si me demoro es por cosa del turno que tengo en el trabajo _xD_