Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
кверти
4 / 4 / 1
Регистрация: 22.09.2013
Сообщений: 165
Завершенные тесты: 2
#1

LibGdx + box2D неверное отображение спрайта - Программирование Android

16.05.2016, 20:23. Просмотров 163. Ответов 0
Метки нет (Все метки)

Добрый день. Обращаюсь к игроделам.
Пишу игру используя libGdx, box2D.
Есть спрайт и физическое тело, на которое должен наложиться этот спрайт.
Проблема: неверное отображение спрайта на теле(скрин)

Каким образом я добавляю на экран тело и спрайт:

Код, описывающий тело:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
public static Body createSpaceShip(World world) {
 
        //Конфигурация главного персонажа
        Body body;
        BodyDef bodyDef = new BodyDef();
        bodyDef.type = BodyDef.BodyType.DynamicBody;
        bodyDef.fixedRotation = true;
        bodyDef.position.set(100, 200);
        body = world.createBody(bodyDef);
 
        Vector2[] mainPos = new Vector2[4];
        mainPos[0] = new Vector2(10.0f, -12.0f);
        mainPos[1] = new Vector2(10.0f, 12.0f);
        mainPos[2] = new Vector2(0.0f, 12.0f);
        mainPos[3] = new Vector2(0.0f, -12.0f);
 
        PolygonShape mainPoligon = new PolygonShape();
        mainPoligon.set(mainPos);
        FixtureDef mainFixtureDef = new FixtureDef();
        mainFixtureDef.shape = mainPoligon;
        mainFixtureDef.density = 100.0f;
 
        Vector2[] rightPos = new Vector2[7];
        rightPos[0] = new Vector2(10.0f, -12.0f);
        rightPos[1] = new Vector2(15.0f, -15.0f);
        rightPos[2] = new Vector2(30.0f, -10.0f);
        rightPos[3] = new Vector2(40.0f, 0.0f);
        rightPos[4] = new Vector2(30.0f, 10.0f);
        rightPos[5] = new Vector2(15.0f, 15.0f);
        rightPos[6] = new Vector2(10.0f, 12.0f);
 
        PolygonShape rightShape = new PolygonShape();
        rightShape.set(rightPos);
        FixtureDef rightFixture = new FixtureDef();
        rightFixture.shape = rightShape;
        rightFixture.density = 100.0f;
 
        Vector2[] leftPos = new Vector2[8];
        leftPos[0] = new Vector2(0.0f, 12.0f);
        leftPos[1] = new Vector2(-10.0f, 17.0f);
        leftPos[2] = new Vector2(-25.0f, 17.0f);
        leftPos[3] = new Vector2(-30.0f, 10.0f);
        leftPos[4] = new Vector2(-30.0f, -10.0f);
        leftPos[5] = new Vector2(-25.0f, -17.0f);
        leftPos[6] = new Vector2(-10.0f, -17.0f);
        leftPos[7] = new Vector2(0.0f, -12.0f);
 
        PolygonShape leftShape = new PolygonShape();
        leftShape.set(leftPos);
        FixtureDef leftFixture = new FixtureDef();
        leftFixture.shape = leftShape;
        leftFixture.density = 100.0f;
 
        Vector2[] topBoxPos = new Vector2[4];
        topBoxPos[0] = new Vector2(-10.0f, 17.0f);
        topBoxPos[1] = new Vector2(-10.0f, 22.0f);
        topBoxPos[2] = new Vector2(-25.0f, 22.0f);
        topBoxPos[3] = new Vector2(-25.0f, 17.0f);
 
        PolygonShape topBoxShape = new PolygonShape();
        topBoxShape.set(topBoxPos);
        FixtureDef topBoxFixture = new FixtureDef();
        topBoxFixture.shape = topBoxShape;
        topBoxFixture.density = 100.0f;
 
        Vector2[] botBoxPos = new Vector2[4];
        botBoxPos[0] = new Vector2(-10.0f, -17.0f);
        botBoxPos[1] = new Vector2(-10.0f, -22.0f);
        botBoxPos[2] = new Vector2(-25.0f, -22.0f);
        botBoxPos[3] = new Vector2(-25.0f, -17.0f);
 
        PolygonShape botBoxShape = new PolygonShape();
        botBoxShape.set(botBoxPos);
        FixtureDef botBoxFixture = new FixtureDef();
        botBoxFixture.shape = botBoxShape;
        botBoxFixture.density = 100.0f;
 
        Vector2[] rocketTopPos = new Vector2[5];
        rocketTopPos[0] = new Vector2(-8.0f, 22.0f);
        rocketTopPos[1] = new Vector2(-5.0f, 25.0f);
        rocketTopPos[2] = new Vector2(-8.0f, 28.0f);
        rocketTopPos[3] = new Vector2(-30.0f, 28.0f);
        rocketTopPos[4] = new Vector2(-30.0f, 22.0f);
 
        PolygonShape rocketTopShape = new PolygonShape();
        rocketTopShape.set(rocketTopPos);
        FixtureDef rocketTopFixture = new FixtureDef();
        rocketTopFixture.shape = rocketTopShape;
        rocketTopFixture.density = 100.0f;
 
        Vector2[] rocketBotPos = new Vector2[5];
        rocketBotPos[0] = new Vector2(-8.0f, -22.0f);
        rocketBotPos[1] = new Vector2(-5.0f, -25.0f);
        rocketBotPos[2] = new Vector2(-8.0f, -28.0f);
        rocketBotPos[3] = new Vector2(-30.0f, -28.0f);
        rocketBotPos[4] = new Vector2(-30.0f, -22.0f);
 
        PolygonShape rocketBotShape = new PolygonShape();
        rocketBotShape.set(rocketBotPos);
        FixtureDef rocketBotFixture = new FixtureDef();
        rocketBotFixture.shape = rocketBotShape;
        rocketBotFixture.density = 100.0f;
 
        Vector2[] tailPos = new Vector2[5];
        tailPos[0] = new Vector2(-30.0f, 0.0f);
        tailPos[1] = new Vector2(-35.0f, 5.0f);
        tailPos[2] = new Vector2(-45.0f, 7.0f);
        tailPos[3] = new Vector2(-45.0f, -7.0f);
        tailPos[4] = new Vector2(-35.0f, -5.0f);
 
        PolygonShape tailShape = new PolygonShape();
        tailShape.set(tailPos);
        FixtureDef tailFixture = new FixtureDef();
        tailFixture.shape = tailShape;
        tailFixture.density = 100.0f;
 
        body.createFixture(mainFixtureDef);
        body.createFixture(rightFixture);
        body.createFixture(leftFixture);
        body.createFixture(topBoxFixture);
        body.createFixture(botBoxFixture);
        body.createFixture(rocketTopFixture);
        body.createFixture(rocketBotFixture);
        body.createFixture(tailFixture);
 
        return body;
    }
Из кода видно, что тело добавляется в позицию
Java
1
bodyDef.position.set(100, 200);
У класса описывающего игрока есть атрибут
Java
1
private Vector2             position;
Который хранит позицию спрайта.
В конструкторе позиция инициализируется как:
Java
1
position = body.getPosition();
При обновлении позиции физического тела в атрибут position записывается body.getPosition();
Почему смещается спрайт? Ведь позицию я задаю ему вроде какую нужно
0
Миниатюры
LibGdx + box2D неверное отображение спрайта  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2016, 20:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос LibGdx + box2D неверное отображение спрайта (Программирование Android):

Libgdx AI - Программирование Android
Добрый день , кто нибудь пользовался данной вещью? https://github.com/libgdx/gdx-ai/wiki Просто кроме этой страницы нигде информации...

Splash на libgdx - Программирование Android
Всем привет есть 2 атласа 2048x2048 на андроиде 4.2 и выше, работает все отлично, все что ниже версией ошибка, причем инициализации....

SQLite и libGDX - Программирование Android
Здраствуйте! Программирую потихоньку игры на либе, так чисто для себя. Тут пришла в голову идея сделать классную игру, расписал все на...

Libgdx polygon - Программирование Android
Добрый день, возникла следующая проблема : создаю объект класса Polygon (com.badlogic.gdx.math.Polygon) , поворачиваю его, рисую: poly...

LibGDX вращение текстуры - Программирование Android
Здравствуйте, есть ли в llibGDX какой-нибудь способ повернуть текстуру кроме обычного draw, он не устраивает, потому что поворот текстуры...

Libgdx уроки посоветуйте - Программирование Android
Привет! Посоветуйте уроки по LibGDX плиз. В гугле на первом месте сайт - http://suvitruf.ru/libgdx/ Он норм? Может что то еще можно...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2016, 20:23
Привет! Вот еще темы с ответами:

Нужен ли мне LibGDX? - Программирование Android
Уважаемые программисты, подскажите, пожалуйста, мне ответ на следующий вопрос: - Я хочу написать очень простую игру (для себя... с целью...

Компиляция игры, libGDX - Программирование Android
Здравствуйте. Помогите скомпилировать проект. Да, странная просьба) Я так понял, компилировать нужно в Andriod Studio. Игра написана с...

LibGDX загрузка аудио - Программирование Android
Ни как не получается загрузить музыку. В папку assets помещаю drop.wav rain.mp3 в методе create делаю так Sound dropSound; Music...

LibGDX. TexturePacker. Не пакует текстуры - Программирование Android
Sync Project with Gradle Files нажимал. Помогите починить, пожалуйста. Для наглядности: package...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru