2016-08-23 2 views
0

Это сложно объяснить, потому что это глоток, но я постараюсь дать вам контекст как можно лучше.Перемещение движения CSS Spritesheet. Простота без скольжения по фоновому изображению

У меня есть маленький персонаж, выходящий на север, юг, восток и запад, на лист спрайтов CSS. В моей игре. вы можете контролировать его движения с помощью WASD, заставляя его заметно перемещать X количество пикселей вверх, вниз, влево или вправо. В зависимости от этого направления CSS-спрайт изменяется так, чтобы он соответствовал тому, чтобы он всегда «смотрел» на направление, в котором он путешествует.

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

Мой вопрос в том, что свойство CSS управляет движением пикселя на экране, потому что установка его на «Все» переводит все, включая положение фона, которое я не хочу.

У меня есть следующий код CSS:

.player { 
    background: url(character.png) no-repeat top left; 
    width: 48px; 
    height: 48px; 
    position: absolute; 
    margin: 0; 
    z-index: 100; 
    transition: all .25s ease; 
} 

.player.playerFront { 
    background-position: 0 0; 
} 

.player.playerBack { 
    background-position: -48px 0; 
} 

.player.playerLeft { 
    background-position: -96px 0; 
} 

.player.playerRight { 
    background-position: -144px 0; 
} 

Javascript:

player.className = 'player playerRight'; 
player.style.left = parseInt(player.style.left) + 48 + 'px'; // Example of the JS when the player moves right 

Я пробовал различные возможности ... ни один из которых работал. Все в StackOverflow и в режиме онлайн говорят только о анимационных или зависающих эффектах и ​​не относятся к моей конкретной проблеме.

+0

Непонятно, что вы просите. _ «Какое свойство CSS управляет движением пикселей на экране» _ - я вижу, что вы перемещаете объект игрока через свойство left, но это очень мало связано с фоновым изображением. Вы можете либо переложить изменение свойства CSS, либо нет. Если вы перейдете в исходное положение, то ожидается эффект, который вы видите. Если вы этого не хотите, не переходите к этому свойству, но будьте конкретны в том, чего хотите, чтобы вы хотели перейти. – CBroe

+0

Используйте [шаги()] (http://designmodo.com/steps-css-animations/) для такого рода вещей. – Scott

+0

CBroe, я хочу перейти к перемещению объекта игрока БЕЗ перехода на фоновое изображение. Мне интересно, что определяет то, что отличается от общего «Все» в процессе перехода. – Timble

ответ

2

Причина, по которой вы не видите плавного перехода в движении, заключается в том, что ваш JS перемещает символ с шагом в 48 пикселей. Когда вы устанавливаете такой стиль непосредственно в JS, вы не увидите его оживляющим, потому что он сразу же устанавливает его в новое значение - даже если вы на нем наложили свойство transition.

Edit: Если вы хотите перейти на позицию, а не фон-позиции, вы могли бы сделать это следующим образом:

transition-property: top, bottom, left, right; 
transition-duration: 0.25s; 
transition-timing-function: ease; 

Тем не менее, он все равно не будет иметь эффект если вы используете JS для установки стиля. Когда вы установите style.left += 48px, он будет перемещать 48px за один раз.

Кроме того, у вас может возникнуть проблема с настройкой вашего спрайта. Убедитесь, что каждая «область спрайта» (т. Е. Каждый сегмент листа, который может быть виден сразу) имеет спрайт с центром в нем, а не с любым из краев. (Может быть полезно сделать код, показывающий, что у вас есть, если вы хотите получить более подробные ответы.)

+0

Он уже плавно переходит с моим кодом. Но он также мерцает, если вы меняете направление движения, так как оно перемещается в новое фоновое положение. Я хочу, чтобы он плавно переходил без изменения CSS-спрайта. – Timble

+0

Кроме того, движение 48px переводит игрока на другой фрагмент сетки, поэтому для этого необходимо, чтобы это было расстояние, и я думаю, что он выглядит слишком резким и жестким, когда он просто двигается внезапно без перехода, но затем у меня есть моя проблема когда я делаю переход CSS – Timble

+0

А - Я обновлю свой ответ, держись. – jack

Смежные вопросы