|
Android Разработка игр на платформе Android |
21.07.2015, 08:34
|
#1
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
libGDX
Как только начал использовать, сразу возникли воросы: - setBlendFunc какие может применять параметры? хотельсь бы картинку по BlendingMode в openGL
- Нельзя установить флаг, что бы все текстуры были с линейной интерполяцией?
- setColor для BitmapFont не работает? У меня нет, получаю из него BitmapFontCache и устанавливают setColors, только это меняет цвет. Версия 1.6.9
|
(Offline)
|
|
21.07.2015, 13:37
|
#2
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений (для 790 пользователей)
|
Ответ: libGDX
А в исходниках посмотреть? (intellij idea позволяет с goto declaration в пару кликов их открывать).
UPD: в классе Texture есть
final static Map<Application, Array<Texture>> managedTextures
- списочек загруженных текстур.
Модификатора доступа нет - чтобы добраться до него, надо будет унаследоваться от Texture или забить на этот способ.
Флагов не заметно, по дефолту в переменные присваивается Nearest.
Имхо, проще написать какой-нибудь метод в стиле Texture loadTexture(String name), который будет грузить текстуру и ставить нужные параметры фильтрации, генерировать mipMaps и делать прочие вещи.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
Последний раз редактировалось Igor, 21.07.2015 в 19:11.
|
(Offline)
|
|
26.08.2015, 19:41
|
#3
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: libGDX
Вопрос возник про box2d.
Я создал игрока, делаю прыжок apllyImpulse(0,-10000), и он типо прыгает, но если начать двигать его по горизонтали в полете (setLinearVelocity (x, y),где 'у'- старая скорость,или импульсом), то он перестает падать, пока я не перестану двигать, затем продолжает, как будто на паузу падение поставили.
Будто блокируется физика во время установки параметров.
Почему так может быть?
Как сделать скорость падения более нефизизически быстрой, setGravity(0,-40) не помогают, linearDamping(0f) тоже.
Код пока не могу скинуть.
|
(Offline)
|
|
26.08.2015, 19:53
|
#4
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: libGDX
Когда двигаешь тело командой setLinearVelocity() - ты жестко задаешь вектор его движения. Естественно гравитация перестает влиять на него.
Двигай при помощи applyForce или applyImpulse.
|
(Offline)
|
|
27.08.2015, 06:42
|
#5
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: libGDX
Сообщение от FireOwl
Когда двигаешь тело командой setLinearVelocity() - ты жестко задаешь вектор его движения. Естественно гравитация перестает влиять на него.
Двигай при помощи applyForce или applyImpulse.
|
В том то и дело, что не помогает, и ттак фризится.
Код
Vector2 lv; Vector2 pos;
public void move(Vector2 dir) { pos = body.getPosition(); if (dir.x < 0) { sprite.setFlip(true, false); } else if (dir.x > 0) { sprite.setFlip(false, false); } lv = body.getLinearVelocity(); if (Math.abs(lv.x) < speed || dir.x != 0) { body.applyLinearImpulse(new Vector2(dir.x * 100000f * speed, 0), pos, false); } else if (dir.x == 0) { // lv.x = 0; // body.setLinearVelocity(lv); }
} public void jump() { groundTest(); if (hasGround && lv.y <= 0) { body.applyLinearImpulse(new Vector2(0, speed * 18000f), pos, true); hasGround = false; } }
private void groundTest() { //hasGround = false; world.rayCast(new RayCastCallback() { @Override public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) {
if (fixture == collider_f || fixture == body_f) { hasGround = false; return -1; } hasGround = true; Gdx.app.log("Callback length:", point.dst(pos) + ""); return 0; } }, pos, new Vector2(pos.x, pos.y - rect.height * 0.55f)); }
|
(Offline)
|
|
27.08.2015, 11:05
|
#6
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: libGDX
Собрал демку (на основе старой записи из блога LibGDX):
http://pastebin.com/650qW2NG
Движение происходит как раз через импульсы, с контролем максимальной скорости:
Vector2 vel = player.getLinearVelocity(); Vector2 pos = player.getPosition(); // cap max velocity on x if(Math.abs(vel.x) > MAX_VELOCITY) { vel.x = Math.signum(vel.x) * MAX_VELOCITY; player.setLinearVelocity(vel.x, vel.y); } // apply left impulse, but only if max velocity is not reached yet if(Gdx.input.isKeyPressed(Keys.A) && vel.x > -MAX_VELOCITY) { player.applyLinearImpulse(-2f, 0, pos.x, pos.y, true); } // apply right impulse, but only if max velocity is not reached yet if(Gdx.input.isKeyPressed(Keys.D) && vel.x < MAX_VELOCITY) { player.applyLinearImpulse(2f, 0, pos.x, pos.y, true); }
Полная картина - на Пастебин.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.08.2015, 12:12
|
#7
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: libGDX
Попробую.
Проблема выскакивает когда импульс 8-10 значный, на низких-нормально
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:37.
|