1

Разработка очень простой обучения игры для Windows Phone 8 в C#, я создал вектор ускорения, как это:Акселерометр с ускорением - перемещение изображения Windows Phone 8

Vector3 acceleration = accelerometerReading.Acceleration; 

я ничего не могу сделать, как:

mycontrol.Xacceleration = mycontrol.Xacceleration + acceleration.X * 200; 

Как я могу применить это ускорение к изображению, я не могу найти никаких корней или свойство ускорения. Я пытаюсь переместить изображение, как в лабиринтной игре, как я могу добиться этого с помощью ускорения? Как я могу применить его?

Спасибо за помощь!

ответ

1

Если вы хотите создать игру с движущимися объектами, вам следует изучить использование XNA или игрового движка, такого как Unity, потому что производительность C#/XAML не будет хорошей.
Если вы действительно хотите использовать C#/xaml, вам нужно будет рассчитать позицию вашего управления изображением самостоятельно. Для того, чтобы установить позицию вы можете поместить изображение внутри Canvas и установить позицию так:

Canvas.SetTop(myControl,XPosition); 
Canvas.SetLeft(myControl,YPosition); 

Вы также можете использовать раскадровку для анимации объектов, но это, вероятно, будет более сложным, если ускорение и направление постоянно меняются

Чтобы воспользоваться преимуществами аппаратного ускорения, вам нужно будет установить CacheMode = "BitmapCache" на движущийся объект.

Вот код, чтобы вычислить положение объекта:

public class ObjectInfo 
    { 
     public Vector2 Position { get; set; } 
     public Vector2 Speed { get; set; } 
     public Vector2 Acceleration { get; set; } 
    } 


    private DispatcherTimer dispatcherTimer; 
    private int refreshTimeMilisecond = 100; 
    private ObjectInfo myObject; 

    public void Init() 
    { 
     myObject = new ObjectInfo(); 
     dispatcherTimer = new DispatcherTimer(); 
     dispatcherTimer.Interval = TimeSpan.FromMilliseconds(refreshTimeMilisecond); 
     dispatcherTimer.Tick += dispatcherTimer_Tick; 
    } 

void dispatcherTimer_Tick(object sender, EventArgs e) 
    { 
     myObject.Position = myObject.Position + myObject.Speed*refreshTimeMilisecond; 
     myObject.Speed = myObject.Speed + myObject.Acceleration * refreshTimeMilisecond; 

     Canvas.SetTop(myControl, myObject.Position.X); 
     Canvas.SetLeft(myControl, myObject.Position.Y); 
    } 

В XAML:

<Canvas> 
    <Image x:Name="myControl" CacheMode="BitmapCache" Source="SmyleyImagePath"/> 
</Canvas> 

Вам нужно будет играть с параметром refreshTimeMilisecond, чтобы выяснить, что работает лучше всего

+0

Я попытаюсь заставить его работать, но как я могу преобразовать ускорение в координаты? Я мог бы использовать xna или что-то подобное, просто, что мне не нравится разрабатывать только код, код и код, мне нравится какой-то графический дизайн, а также - единство pro - путь к дорогому на данный момент. – Erik

+0

обновил мой ответ, чтобы вы начали с того, как для расчета позиции –

+0

Поручите, спасибо вам! Я собираюсь потратить некоторое время на выяснение этого и попытаться заставить все работать. Еще раз спасибо :) – Erik

Смежные вопросы