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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Ошибка верификации при запуске приложения http://www.cyberforum.ru/android-dev/thread1736666.html
При попытке протестировать приложение на реальном устройстве Android 4.4.2(API 19) оно падает с исключением: FATAL EXCEPTION: main Process: ru.wanket.wanketclicker, PID: 1607 java.lang.VerifyError: ru/wanket/wanketclicker/MainActivity at java.lang.Class.newInstanceImpl(Native Method) at java.lang.Class.newInstance(Class.java:1208) at...
Android посмотреть блоки Андроида С помощью программы Сygwin пытаюсь посмотреть блоки Андроида, набираю adb shell - служба запускается, выдает номер девайса и статус: девайс в офлайне. Что это может быть ? http://www.cyberforum.ru/android-dev/thread1736639.html
Рэндомно забрать из cursor Android
Доброго времени! Мне нужно рэндомно забрать из cursor слово и заполнить буквами из него button на TableLayout т.е. каждую букву на новую кнопку как можно это реализовать?
Не работает AlarmManger Android
Всем добрый день. Пробую запустить AlarmManager, но видимо, где-то что-то упустил. в MainActivity: @Override protected void onResume() { super.onResume(); AlarmManagerReceiver.SetAlarm(this); }в Бродкасте:
Android Как изменить шрифть в форме регистрации? http://www.cyberforum.ru/android-dev/thread1736440.html
Что в "properties" отвечает за шрифт текста в форме? В style ввел "Roboto", ничего не изменилось
Android Синхронизация между потоками Вот, например у меня есть основной Ui поток и поток Thread который он породил. И Tread меняет какую то переменную (ну или массив целый) и я хочу, чтобы об этих измениях узнал Ui поток. Ну понятно есть механизмы Handler там Broadcast и прочее. А как нибудь без них можно например обьявить переменную volatile там, опрашивать ее состояние через определенный промежуток времени в Ui потоке(ну там... подробнее

Показать сообщение отдельно
кверти
4 / 4 / 1
Регистрация: 22.09.2013
Сообщений: 139
Завершенные тесты: 2

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

16.05.2016, 20:23. Просмотров 102. Ответов 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();
Почему смещается спрайт? Ведь позицию я задаю ему вроде какую нужно
Миниатюры
LibGdx + box2D неверное отображение спрайта  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru