¿Cómo hacer un modificador de juego en idioma Yi?
Materiales de juego. Creo que hay mucha gente como yo, ¿no?
# #Lo que queremos discutir aquí no es la teoría de juegos avanzada, sino cómo funciona en lenguaje Yi.
Dibuja la pantalla del juego. Como no sé mucho, corrígeme.
Contenido principal: 1: Cómo dibujar una imagen.
2. ¿Cómo eliminar el parpadeo?
3. ¿Cómo diseñar la estructura de roles?
4. Cómo realizar una fusión translúcida
5. Cómo realizar un procesamiento avanzado de imágenes
************** ** ************************************************* *** *****
(1):
1. ¿Cómo dibujar una imagen?
Demasiado simple. Utilice una tableta de dibujo.
Primera
Número de imagen = imagen cargada ("nombre del archivo de imagen")
Mesa de trabajo 1. Haz un dibujo (número de imagen)
* *En segundo lugar, dibuja la animación.
También es muy simple: primero cargue varias imágenes y sus números de imagen se almacenan en la matriz de números de imagen [N].
Encabezado del bucle de conteo (número de imágenes, variable de conteo)
Mesa de trabajo 1. Haz un dibujo (matriz de números de imágenes [variable de conteo])
Fin del período de conteo
* * * * * *Probablemente ya hayas visto su lado malo, es demasiado engañoso.
Podemos hacerlo de dos formas.
1: Mesa de trabajo 1. No volver a dibujar()
Mesa de trabajo 1. Haz un dibujo()
Mesa de trabajo 1. Permitir redibujar()
2: Poner otra mesa de trabajo 2
Primero dibuja la imagen que queremos dibujar en la mesa de trabajo. Luego copie la mesa de trabajo 2 a la mesa de trabajo 1.
# #De hecho, vamos a utilizar el método dos.
Puedes intentar averiguar cuántas veces la velocidad de copiar dos mesas de trabajo es la de dibujar. Pienso
unas 10 veces.
********************************************* *** *
Si hicieras un dibujo a la vez en el experimento anterior, no verías ninguna diferencia.
Pero, en realidad, cada cuadro se compone de muchas imágenes pequeñas.
Por ejemplo, juegos de aviones. Hay más de diez aviones enemigos, además de las balas en el cielo, debemos pintarlos uno por uno.
Al subir, si dibuja directamente en el tablero de dibujo principal de la ventana, inevitablemente parpadeará. Entonces tenemos que establecer dos.
Mesa de trabajo, mesa de trabajo principal, mesa de trabajo auxiliar. Primero, dibuje el avión y las balas uno por uno en el tablero de dibujo auxiliar.
Sácalo y utiliza otro.
Mesa de trabajo auxiliar. copiar(,,,tablero de dibujo principal,,)
Cópielos inmediatamente al tablero de dibujo principal.
# #Aquí me gustaría agregar que los aviones enemigos y las balas también son imágenes. Si lo dibuja directamente en el tablero de dibujo auxiliar ().
En realidad, esto lleva tiempo. Entonces necesitamos agregar otra mesa de trabajo.
Tablero de dibujo de materiales
¿Es necesario añadir tantos tableros de dibujo como imágenes de aviones enemigos hay?
No puedes.
Aquí es necesario diseñar la estructura de datos.
Dejemos que una estructura se llame [prototipo]
Tiene los siguientes miembros:
1:x
2:y p> p>
3:Ancho
4:Alto
5:Tiempo de permanencia
Al cargar imágenes, puede ensamblar todas las imágenes para utilizada en una imagen, esta imagen se puede cargar en la mesa de trabajo de materiales.
Luego establezca una variable de matriz.
Prototipo de objeto [N] prototipo de tipo de datos
Antes de ejecutar el programa, el vértice izquierdo, la longitud y
ancho se asignan al prototipo de objeto [N] a su vez cada elemento de la matriz.
Esto facilita su uso en el programa.
Tablero de dibujo de material. copiar(, prototipo de objeto[N].
Ancho, prototipo de objeto [N]. Altura, mesa de trabajo auxiliar, prototipo de objeto [N]. x, prototipo de objeto [N]. y,)
De hecho, tendremos otra estructura [objeto físico] en el futuro.
Sus miembros son:
1:x
2:y
3. Prototipo de tipo de datos
>4: Nivel (cuando hay varios objetos, indique su nivel de oclusión)
5: Si se detecta colisión.
6: El camino a seguir
7: Las coordenadas del destino.
8. Cómo manejar las colisiones
Lo realmente útil será este objeto real.
Es aburrido hablar tanto. De hecho, equivale a construir un control visual en idioma Yi.
Por ejemplo, si el marco de imagen 1.x=100 y el marco de imagen 1.y=200, puedes moverlo a 100, 200.
Nosotros simplemente estamos imitando sus principios.
##¿Por qué no utilizar el control visual? Es por la velocidad.
********************************************* *** *****
La estructura del juego se analiza anteriormente. De hecho, puedes diseñarlo como quieras, siempre que te resulte conveniente.
Así que no diré mucho más. Me refiero principalmente a imágenes.
# #¿Cómo dibujar una imagen compuesta semitransparente?
Esto también se llama mezcla alfa. Utilizado por muchos juegos a gran escala. Hay una función en la API que me funciona.
Para niños. AlphaBlend()
-
Comando Dll: mezcla translúcida
Tipo de valor de retorno: tipo lógico
Nombre de archivo de biblioteca Dll: msimg32. dll
Nombre del comando en la biblioteca Dll: AlphaBlend
Parámetro: hdc1
Parámetro: x
Parámetro: y
Parámetro: ancho
Parámetro: alto
Parámetro: hdc2
Parámetro: x2
Parámetro: y2
Parámetro: Ancho 2
Parámetro: Alto 2
Parámetro: Método de copia Tipo de datos: Entero
-
De hecho, es El uso es similar al método de copia de la mesa de trabajo, excepto que hay dos parámetros más.
Los parámetros hdc1 y hdc2 son los identificadores de dispositivo del tablero de dibujo de origen y del tablero de dibujo de destino.
-
Comando Dll: getdc
Tipo de valor de retorno: tipo entero
Nombre de archivo de biblioteca Dll: user32.dll
Nombre del comando en la biblioteca DLL: GetDC
Parámetro: identificador de ventana
-
El método de uso específico es el siguiente:
-
Subrutina:_ _Iniciar ventana_ creada
Hdc1 = getdc(Mesa de trabajo 1. Obtener identificador de ventana())
Hdc2 = getdc(Mesa de trabajo 2. Obtener identificador de ventana())
-
-
Subrutina:_ Botón 4_ Clic
Función alfa (HDC1, 0, 0 , 200, 200, HDC2, 0, 0, 200, 200, grado de mezcla × 50)
-
Explicación: El grado de mezcla anterior = potencia (2, 16), el El siguiente 50 es el grado de mezcla, de (0~255).
Esto se debe a que el parámetro es un puntero de estructura de cuatro bytes.
El programa anterior se puede ejecutar. Por supuesto, primero debe dibujar en el tablero de dibujo 2 o configurar el mapa base.
De hecho, no sólo el tablero de dibujo puede sacar el CC, sino que cualquier objeto de ventana tiene un CC, por lo que el control del botón (
o cualquier otro control) se puede poner en la mesa de dibujo o en cualquier lugar.
Por supuesto, después de utilizar el DC, hay que liberarlo de forma segura.
Agrega el siguiente comando a la ventana Inicio que será destruida.
Libere dc(_start window. Obtener identificador de ventana(), hdc1)
Libere dc(_start window.
Obtener identificador de ventana (), hdc2)
El comando se define de la siguiente manera:
-
Comando Dll: liberar dc
Dll Nombre del archivo de biblioteca: user32.dll
Nombre del comando en la biblioteca Dll: ReleaseDC
Parámetro: identificador de ventana
Parámetro: hdc
-
********************************************* ***** *************************************
# #Cómo para realizar frente a gráficos avanzados?
Nota: mire, es de alto nivel, no de alta velocidad, porque todavía no he aprendido a procesar imágenes a alta velocidad.
Aquí se describe el método más sencillo. Si lo sabes por favor responde, muchas gracias.
Por ejemplo, al entrar en algunos juegos, la pantalla se pone blanca o negra. A veces se pone rojo.
Color (sobre todo al teñir). Es como estar bloqueado por una capa de papel de color transparente.
¿Cómo se logra esto?
Primero defina un conjunto de bytes zz.
Entonces
Zz=Mesa de trabajo 1. Tomar foto()
En este momento, los valores de color de todos los puntos en la mesa de trabajo 1 se almacenan en la matriz zz. Su formato es el siguiente.
Los primeros 54 elementos son descripciones de formato (no lo sé, supongo)
Desde el elemento 55 hasta el final, son los datos de cada punto de la imagen.
La explicación es la siguiente: Si hay un punto rojo 1 en la esquina inferior izquierda del tablero de dibujo, entonces.
Zz[55]=0 valor azul
Zz[56]=0 valor verde
Zz[57]=255 valor rojo
Sabiendo esto, podemos procesar la imagen a nuestra manera.
-
Subrutina:_ botón 1_ hecho clic
Contenedor local: zz Tipo de datos: conjunto de bytes
Contenedor local: recuento Tipo de datos : conjunto de bytes
Zz = Mesa de trabajo 1. Tomar foto (,)
Contar=55
Contar la cabeza del bucle (Mesa de trabajo 1. Ancho * Mesa de trabajo 1. Alto,)
Zz[Contar]=255
Conteo = conteo + 3
Fin del período de conteo
Mesa de trabajo 1. Imagen base = ZZ
-
Arriba cambiamos todos los colores azules a 255 (el valor máximo), para que toda la imagen en la mesa de trabajo parezca una capa.
Papel transparente azul. Nuestro deseo se hizo realidad. ......
Finalmente tengo que decir: este método es muy lento de procesar y la mayor parte del tiempo se pierde en la mesa de dibujo. Tome la foto() y
Mesa de trabajo 1. Imagen base = zz arriba.
Este método es el más sencillo, pero el menos eficaz. Lo probé aquí.
Cuando el tamaño de la mesa de trabajo es 400 * 200
El tiempo de ejecución del programa anterior es de aproximadamente 0,4-0,5 segundos. En otras palabras, sólo se pueden dibujar dos imágenes por segundo.
Aumente adecuadamente el valor de cambio de color Cuando el valor de cambio de color de píxeles de cada cuadro de la imagen aumente a aproximadamente 10,
El efecto se verá similar y el desvanecimiento y la aparición gradual. Se puede lograr el efecto deseado.
Utilice este método para realizar diversos procesamientos, como efectos de filtro, efectos de relieve, síntesis de translucidez verdadera, etc.
(La API Alphand() descrita anteriormente no es una verdadera mezcla alfa, sino una mezcla fija.)
"Lo sabes todo. Puedes decir cualquier cosa. Cien personas La reputación no está cifrado. No se puede destruir a cien personas." - Zhuge Tingdong