Red de conocimiento informático - Material del sitio web - ¿Cómo hacer que la bola se mueva a lo largo de una curva en flash as3? Similar al movimiento de la pelota en el juego de Zuma. No use la capa de arranque, use código AS.

¿Cómo hacer que la bola se mueva a lo largo de una curva en flash as3? Similar al movimiento de la pelota en el juego de Zuma. No use la capa de arranque, use código AS.

Yo. Primero conozco el camino.

1. Utilice el método del punto de seguimiento para establecer valores aproximados.

2. Luego extrae las coordenadas de los puntos anteriores y agrega la matriz:

var?MapData=,,,,,,

,,,, ,

p>

,,,

,,,,,]];

Puede utilizar el siguiente método primitivo para ver la ruta:

función?initMap(arr . Array)?{

graphics.lineStyle(2, 0xFFFFFF);

graphics.moveTo(arr[0][0 ], arr[0][1]);

for(var?i:uint?=?1;?ilt;arr.length?-?2;? i)?{

var?xc:Número?(arr[ i][0]? ?arr[i 1][0])/2;

var?yc: Número?=?curveTo(arr[ i][0], arreglo[i][1 ], arreglo[i 1][0 ], arreglo[i 1][1]);

}

3. Luego use la clase de curva de Bézier para generar una cierta cantidad de puntos clave.

Clase de curva de Bezier:

¿paquete?{

import?flash.geom.Point;

¿clase pública?Bezier ?{

/? =======================================?Atributo

//?Variable externa

privada; static; var; p_start: Punto //p>privado?static?var?p_ctrl ;//?Punto Bezier

privado?static?var?p_over: Punto; //?Punto final

privado?static?var?step: uint //?Dividir número de comparte

//?Variables auxiliares

privada?static?var?ax: int;

privada?static?var?ay: int;

privado?static?var?bx: int;

privado?static?var?by: int;

privado?static?var?A: Número

privado?estático?var?B: Número;

privado?longitud

//?Función de velocidad

privado?estático? función?s(t:Número):Número; {

return?Math.sqrt(A?*?t?*?t? ?B?*?t? ?C);

}

/?Función de longitud

¿privada?estática?función?L(t:Número):Número?{

var?temp_ctrl:Número ?=?Math.sqrt(C? ?t?*?(B? ?A?*?t));

var?temp_over:Número?=?(2?*?A?*? t?*?temp_ctrl? ?B?*(temp_ctrl?-?Math.sqrt(C)));

var?temp3:Número?=?Math.log(B? ?2?*? Math.sqrt(A)?*?Math.sqrt(C));

var?temp4:Número?=?Math.log(B? ?2?*?A?*?t? ? 2?*?Math.sqrt(A)?*?temp_ctrl);

var?temp5: Número=2*Math.sqrt(A)*temp_over;

var?temp6 :Número=?(b?*?b?-?4?*?a?*?c)?(b?*?b?-?4?*?a?*?c)?(temp3?-?temp4 );

retorno?(temp5? ?temp6)?/(8?*?Math.pow(A,?1.5));

}

/?La función inversa de la función de longitud, resuelta usando el método tangente de Newton

private?static?function?InvertL(t:Number,?l:Number):Number?{

var?t1: Número=t;

var?t2: Número;

hacer?{

>

t2?=?t1?-? (L(t1)?-?l)/s(t1);

if?(Math.abs(t1-t2)?lt;? 0.000001)?{

interrupción;

}

t1=t2;

}mientras(verdadero);

return?t2;

}

/?Devuelve el número total de pasos requeridos

public?static?function?init($p_start: Point, $p_ctrl: Punto, $p_over: Punto, $velocidad: Número): uint?{

p_start=$p_start;

p_ctrl=$p_ctrl;

p_over=$p_over;

/step?=?30;

ax=p_start.x-2*p_ctrl.x p_over.x;

ay= p_start.y-2*p_ctrl.y p_over.y;

bx=2*p_ctrl.x-2*p_start.x;

by=2*p_ctrl.y-2 *p_start.y;

A=4*(ax*ax ay*ay);

B=4*(ax*bx ay*by);

C=bx*bx by*by;

/?Calcular la longitud

total_length=L(1);

//?Calcular el número de pasos

step=Math.floor(total_length/?$speed);

if(total_length??$speed?gt;?$speed?/?2)?{

paso;

}

regresar? Obtener el punto de anclaje según la posición nIndex especificada: devolver coordenadas y ángulo

public?static ?function?getAnchorPoint( nIndex: Número): ¿Matriz?{

if(nIndex?gt;=?0?amp;amp;? nIndex?lt;=?step)?{

var?t :Número=nIndice/paso;

/?Si crece por fila y columna, calcula la longitud de la curva correspondiente al punto

var?l: Number=t*total_length;

/?Según la función inversa de la función L, encuentre el valor t correspondiente a l

t=InvertL(t, l);

//?Según la curva de Bézier Función para encontrar las coordenadas x, y del punto

var?xx: Número?=?(1?-?t)?*?( 1?-?t)?*?p_start.x? ?(1?-?t)?*?t?*?p_ctrl.x? p>var?yy:Número?=?(1? -?t)?*?(1?-?t)?*?p_start.y?2?*?(1?-?t)?*?t ?*?p_ctrl.y? ?t?*?t ?*?p_over.y;

//?Obtener tangente

var?Q0: Punto?=?nuevo?Punto ((1?-?t)?*?p_start. x? ?t?*?p_ctrl.x,? (1?-?t)?*?p_start.y? ?t?*?p_ctr

l.y);

var?Q1: Punto?=?new?Point((1?-?t)?*?p_ctrl.x? ?t?*?p_over.x,? (1?- ?t)?*?p_ctrl.y? ?t?*?p_over.y);

//?Calcular ángulo

var?dx: Número=Q1.x-Q0 .x;

var?dy: Número=Q1.y-Q0.y;

var?radianes: Número=Math.atan2(dy,dx);

var?grados.Number=radianes*180/Math.PI;

xx=int(xx*10)/10

yy=int(yy*10)/ 10

grados=int(grados*10)/10

return?[xx,?yy,?grados];

}?else?{

¿regresar?[];

}

}

}

¿regresar?

¡Los puntos son códigos, no líneas guía!

Dos aplicaciones:

Por no estar en esta pregunta se omiten

上篇: Cómo crear una página de prueba ASP.NETDe hecho, esta es la única manera de garantizar que las páginas y componentes ASP.NET en una solución de posproducción se ejecuten como se espera. Los límites de confianza y los problemas de seguridad deben verificarse especialmente cuando se llama desde una capa de la solución a otras capas. Además, al ejecutar pruebas, no se estanque en la creación de interfaces de clase de producción. Simplemente pruebe el método de destino. De hecho, crear intencionalmente algunas páginas de prueba "feas" es una buena estrategia porque no querrás terminar usándolas para una solución de producción. En este artículo, creé algunas páginas ASP.NET muy simples que contienen una lista de registros de prueba y un formulario de entrada para agregar, editar y eliminar registros de prueba. Por ejemplo, a continuación se muestra el diseño del formulario web para un registro de tema de prueba. Notará que contiene una etiqueta de estado para mensajes de error u otra información, una etiqueta de recuento de registros, una cuadrícula de datos que muestra una lista de registros, un cuadro de entrada para ingresar el ID del registro que se utilizará al recuperar registros y soporte para agregar , editar y eliminar registros en formato pequeño (ver Figura 1). Figura 1: Diseño de formulario web para registros de sujetos de prueba Al crear páginas de prueba, es mejor mantener el código simple y claro. Normalmente agrego un pequeño fragmento de código a cada botón que llama a un método nativo para manejar las operaciones de la base de datos. El siguiente es el código para el botón "Obtener registros" en la página TopicTest.aspx. Private Sub btnGetTopic_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Maneja btnGetTopic.Click Pruebe Dim ID As Integer = Int32.Parse(txQueryID.Text) GetItem(ID) ' Realiza una llamada a la base de datos txID.Text = txQueryID.Text txTitle.Text = mTitle txDescription.Text = mDescription lbStatus.Text = "¡Éxito!" Captura ex como excepción lbStatus.Text = ex.Message End Try End Sub Tenga en cuenta que la única acción realmente realizada en este método es GetItem (ID) procesamiento de llamadas al método. Realiza una llamada a la base de datos y establece una variable local con el valor de retorno. A continuación se muestra el código para el método GetItem. Tenga en cuenta que utiliza muchos objetos SqlParameter para manejar valores de entrada y salida. 下篇: ¿Necesito una libreta para notas?