2014-10-31 3 views
0

У меня есть спрайт, который перемещается от нижнего левого угла экрана вверху справа. Я хочу знать, как бы мне заставить его развернуться и идти в противоположном направлении, и продолжить этот цикл.Создание спрайтов в oppsite направлении вектора

Я попытался отрицать направление вектора, но это не работает.

Это то, что я есть сейчас:

public void create() { 
    // Game Initialization 
    v = new Vector2(Gdx.graphics.getWidth() - 0, Gdx.graphics.getHeight() - 0); 
    v.nor(); 
    v.scl(100); 

    spriteBatch = new SpriteBatch(); 
    bug = new Sprite(new Texture("EnemyBug.png")); 
    bug.setSize(50, 85); 
    bug.setOrigin(0,0);//Gdx.graphics.getHeight()/5, Gdx.graphics.getHeight()/5); 
    bug.setPosition(1,1);//Gdx.graphics.getWidth() - 50, Gdx.graphics.getHeight() - 50); 
    bug.rotate(v.angle()); 

    rotDeg = 5; 
} 

@Override 
public void render() { 
    // Game Loop 

    Gdx.gl.glClearColor(0.7f, 0.7f, 0.2f, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    spriteBatch.begin();   

    if(bug.getX() >= (int)(Gdx.graphics.getWidth() - 100) && bug.getY() >= (int)(Gdx.graphics.getHeight() - 100)){ 
     turn = !turn; 
    } 
    else if(bug.getX() <= 50 && bug.getY() <= 50){ 
     turn = !turn; 
    } 


    if(!turn){   
     bug.translate(v.x * Gdx.graphics.getDeltaTime(), v.y * Gdx.graphics.getDeltaTime()); 
    } 
    else{ 
     bug.translate(-(v.x * Gdx.graphics.getDeltaTime()), -(v.y * Gdx.graphics.getDeltaTime())); 
    } 

    bug.translate(v.x * Gdx.graphics.getDeltaTime(), v.y * Gdx.graphics.getDeltaTime()); 
    bug.draw(spriteBatch); 
    spriteBatch.end(); 
} 

ответ

2

Вы переводите спрайт дважды за кадр:

if(!turn){   
     bug.translate(v.x * Gdx.graphics.getDeltaTime(), v.y * Gdx.graphics.getDeltaTime()); 
    } 
    else{ 
     bug.translate(-(v.x * Gdx.graphics.getDeltaTime()), -(v.y * Gdx.graphics.getDeltaTime())); 
    } 

    //REMOVE THIS LINE 
    bug.translate(v.x * Gdx.graphics.getDeltaTime(), v.y * Gdx.graphics.getDeltaTime()); 

Это дополнительная линия может быть причиной вашей проблемы, сводя на нет отрицательного перевода и удваивая положительный.

+0

это оператор if, он будет делать только один из них для каждого кадра. строка, которую вы говорите мне, чтобы удалить, спрайт переместится в верхний правый угол, тот, у кого есть отрицательный, должен сделать это от верхнего правого до нижнего левого. – User765876

+0

Перевести на if, если он будет двигаться в положительном направлении. Другой перевод на другое сделает его отрицательным. Дополнительный всегда будет выполняться с удвоением положительного и аннулированием отрицательного. – MadEqua

+0

так как бы я его реализовал? удалить весь оператор if/else? – User765876