Как правило, я обычно делаю это нормально, но я в тупике. Я подозреваю, что это математическая комбинация, которую я пропустил, но в любом случае.Как нарисовать спрайт на движущемся холсте
У меня есть движущийся фон (в настоящее время идет вверх и вниз сверху вниз) У меня есть движущийся объект (в настоящее время движется влево и вправо от центра холста программно).
Итак, это вопрос, как я могу сделать объект перемещающимся относительно позиции на холсте в направлениях x и y?
Вот мои соответствующие коды:
//Helper method
private Vector2 CalculateDirection()
{
Vector2 calculatedDirection = new Vector2((float)Math.Cos(direction),
(float)Math.Sin(direction));
calculatedDirection.Normalize();
return calculatedDirection;
}
объект на холсте
public void Update(GameTime gameTime, Vector2 center)
{
this.currentCentre = originalCentre - center;
//movement logic here
Vector2 calculatedDirection = CalculateDirection();
//deltaTime = ((float)gameTime.ElapsedGameTime.TotalMilliseconds)/15f;
if (speed > 0f || speed < 0f)
{
///TODO: work this out!!
Velocity = calculatedDirection * speed;
float dir = (originalCentre.Y - currentCentre.Y);
position.X += Velocity.X * (1.0f - 0.9f);
position.Y = dir;// *(1.0f - 0.9f);
}
}
холст перемещения методы
private void determinePitchSize()
{
int newHeight = Convert.ToInt32(pitch.Height * ratio);
this.canvas = new Rectangle(
0, posHeight,
device.PresentationParameters.BackBufferWidth,
newHeight
);
}
public void increasePosHeight()
{
posHeight++;
}
public void decreasePosHeight()
{
posHeight--;
}
private void determineDirection()
{
if (!direction)
{
if (this.canvas.Height + this.canvas.Y <= this.screenY)
direction = true;
}
else
{
if (this.canvas.Y >= 0)
direction = false;
}
}
private void useDirection()
{
this.determineDirection();
if (direction)
this.increasePosHeight();
else decreasePosHeight();
}
Если вам нужна дополнительная информация, я могу добавить его здесь.
Благодаря
Просто добавьте положение холста к позиции объекта перед рисованием? –
Я думаю, что я слишком усложнил это, я попытаюсь немного разбить его и посмотреть, смогу ли я получить его правильно. Я подозреваю, что когда я это выясню, я разрешу это. Хорошо, поэтому рисовать его в середине холста легко. У меня это было освоено как position = center в методе обновления. – Adsy2010
Как я уже говорил, сохраните относительное положение и сделайте 'position = center + relativePosition'. Простой случай, который вы упомянули, относится к относительной позиции '(0, 0)'. –