2012-05-25 12 views
6

Estoy diseñando un tipo de diseño de dragaminas para un juego en Silverlight. Actualmente, he usado un control de usuario square en el control Canvas. Hay propiedades asignadas a ella. También quiero agregar una funcionalidad en una etapa posterior. Se trata de curvar utilizando las curvas de bezier y trazar esos cuadrados en la curva con las coordenadas x, y en lugar de pasar. Luego quiero enviar la posición x, y del cuadrado en un archivo XML.optimiza el rendimiento del juego plateado Silverlight

Mi pregunta es de qué manera debo usar que será la mejor combinación optimizada en términos de menor consumo de memoria, rendimiento rápido y eficiente, así como una fácil implementación. Si sus expertos tienen alguna otra idea, háganmelo saber. ¡Gracias de antemano!

Respuesta

2

Bueno, a lo largo de los días, resolví la respuesta yo mismo. Continué con mi control de usuario Square y lo usé en el diseño.

Sobre el trazado de las posiciones x/y, utilicé esta:

Point point = myElement.TransformToVisual(App.Current.RootVisual as FrameworkElement)).Transform(new Point(0, 0)); 

Hubo un problema técnico en el ahorro de archivo XML porque Silverlight 4 no da privilegios elevados para su aplicación en el navegador. Pero luego utilicé esto en mi botón de guardar clic evento:

 SaveFileDialog dlgSave = new SaveFileDialog(); 
     dlgSave.DefaultExt = "xml"; 
     dlgSave.Filter = "XML Files (XML)|*.xml;"; 
     dlgSave.FilterIndex = 1; 
     strXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + myXML.ToString();//myXML is the XDocument I created globally and saved data in it 
     try 
     { 
      bool check = (bool)dlgSave.ShowDialog(); 
      if (check) 
      { 
       using (Stream stream = dlgSave.OpenFile()) 
       { 
        StreamWriter sw = new StreamWriter(stream, System.Text.Encoding.UTF8); 
        sw.Write(strXML); 
        sw.Close(); 
        stream.Close(); 
       } 
       MessageBox.Show("XML Saved successfully"); 
      } 
      catch (SecurityException) 
      { 
       MessageBox.Show("There seems to be an issue with saving XML file on the disk, please try again...", "Something's not right", MessageBoxButton.OK); 
      } 
      catch (UnauthorizedAccessException) 
      { 
       MessageBox.Show("Saving here requires authorised permissions", "Access Denied", MessageBoxButton.OK); 
      } 
+0

y esto funciona bien? – user1425606

+0

sí, @ user1425606, esto funciona mejor de lo esperado. Aunque tardé más tiempo en buscar la solución adecuada – vaibhav

+0

, también quiero hacer diseños similares en Silverlight. – user1425606

2

Si puede dibujar todo como formas e imágenes (es decir, gráficos vectoriales), podrá aprovechar la aceleración de hardware para los elementos gráficos. Además, obtendrás un mejor rendimiento si no defines tus cuadrados como UserControls, deberías crearlos dinámicamente en código como formas que contienen otras formas y luego tener un modelo de objetos vinculado a las formas en función de su posición (por ejemplo, Cuadrados del diccionario; elementos cuadrados del diccionario).

En términos de consumo de memoria y acceso a archivos debe mantener la posición x, y del cuadrado en la memoria como estructura de punto y serializar en archivo (XML está bien) solo cuando lo necesite (es decir, cuando el jugador abandone el juego) .

Cuestiones relacionadas