2010-02-02 11 views
6

He podido encontrar mucha información sobre el desarrollo lógico real de los juegos. Realmente me gustaría hacer un juego de cartas, pero simplemente no entiendo cómo, en función de la posición del mouse, se puede seleccionar un objeto (o al menos de la manera correcta) Primero pensé en la verificación del cuadro delimitador, pero no todos mis mapas de bits son rectángulos. Luego pensé en hacer un buffer escondido con cada objeto teniendo un color diferente, pero parece ridículo tener que hacerlo de esta manera. Me pregunto cómo se hace realmente. Por ejemplo, ¿cómo sabe Adobe Flash el objeto debajo del mouse?Un método para crear un juego simple GUI

Gracias

+0

¿Estás hablando de aplicaciones puramente 2D? – Andres

Respuesta

6

su pregunta es cómo saber si el ratón está por encima de un mapa de bits no rectangular. Supongo que todos tus mapas de bits son realmente rectangulares, pero tienen regiones transparentes. Ya debe poder decir de alguna manera qué parte de su mapa de bits (rectangular) es transparente, dependiendo del esquema que use (por ejemplo, si designa un color como transparente o si usa una máscara de bits). También sabrá el orden z (capas) de mapas de bits en su lienzo. Luego, cuando detecte un clic en la posición (x, y), debe encontrar la lista de mapas de bits rectangulares que se extienden sobre ese píxel. Ordénelos por orden zy para cada uno, verifique si el píxel es transparente o no. En caso afirmativo, avance al siguiente mapa de bits. Si no, entonces este es el mapa de bits seleccionado.

1

O puede usar una solución geométrica. Debe almacenar/administrar la geometría de la tarjeta/artículo. Por ejemplo, una lista de formas como círculos, rectángulos.

Quizás triángulos o elipses si tiene mucho tiempo. Decir que un triángulo tiene un punto o no es una pregunta matemática y puede ser numéricamente inestable si el triángulo es muy delgado (el algoritmo tiene una división).. Solución: How to determine if a point is in a 2D triangle?

He votado a favor de abc.

+1

La inestabilidad numérica no es un problema. Los mapas de bits (por ejemplo, la pantalla) son discretos, por lo que utiliza las matemáticas de números enteros. No calcula valores de pendiente; calcula promedios ponderados de los puntos finales. Si una línea va desde (x1, y1) a (x2, y2) para un punto con xa, obtiene ya = y1 + ((y2-y1) * (xa-x1))/(x2-x1)). Debes asegurarte de tener suficientes bits en tus enteros para los resultados intermedios, pero solo hay una división, y el divisor es bastante manso. – Steve314

+0

Todavía vale la pena un voto positivo, sin embargo. – Steve314

Cuestiones relacionadas