Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.04.2013, 13:41
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 1  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
По умолчанию узнать грань игральной кости

Приветствую!

Есть игральная кость на 2д плоскости. И стрелки управления: вверх, вниз, влево, вправо. При клике на стрелку кость перекручивается в соответствующую сторону. Как узнать какую грань показывать?

Старый 16.04.2013, 14:08
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Зачем спрашивать вещи, которые с легкостью находится на просторах интернета?

Википедия в помощь же.
__________________
hauts.ru

Старый 16.04.2013, 14:18
MoHaX вне форума Посмотреть профиль Отправить личное сообщение для MoHaX Найти все сообщения от MoHaX
  № 3  
Ответить с цитированием
MoHaX
 
Аватар для MoHaX

Регистрация: Aug 2004
Сообщений: 422
Отправить сообщение для MoHaX с помощью ICQ
я бы сделал так

кубик у меня такой

Код:
   [5]
[4][1][2]
   [3]
   [6]
Код AS3:
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
 
var cub : Array = [[3,1,4,2],[0,5,4,2],[3,1,0,5],[5,0,4,2],[3,1,5,0],[1,3,2,4]];
var cubFace : int = 0;
 
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD);
 
function onKD (e: KeyboardEvent) : void {
	if(e.keyCode == Keyboard.LEFT){
		cubFace = cub[cubFace][0];
	}
	if(e.keyCode == Keyboard.RIGHT){
		cubFace = cub[cubFace][1];
	}
	if(e.keyCode == Keyboard.UP){
		cubFace = cub[cubFace][2];
	}
	if(e.keyCode == Keyboard.DOWN){
		cubFace = cub[cubFace][3];
	}
	trace('cubFace:'+ (cubFace + 1));
}

Старый 16.04.2013, 16:44
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 4  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Насколько я помню, у кубика сумма противоположных граней должна равняться 7. Т.е будет вот так:
Код:
   [5]
[4][1][3]
   [2]
   [6]
__________________
тонкий тролль, осеянный благодатью

Старый 16.04.2013, 17:11
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
MoHaX, а ничего, что кубик поворачивается? Что под клавишу Up может попасть любая из четырех прилегающих сторон?
__________________
Reality.getBounds(this);

Старый 16.04.2013, 23:11
MoHaX вне форума Посмотреть профиль Отправить личное сообщение для MoHaX Найти все сообщения от MoHaX
  № 6  
Ответить с цитированием
MoHaX
 
Аватар для MoHaX

Регистрация: Aug 2004
Сообщений: 422
Отправить сообщение для MoHaX с помощью ICQ
Цитата:
Сообщение от Wolsh Посмотреть сообщение
MoHaX, а ничего, что кубик поворачивается? Что под клавишу Up может попасть любая из четырех прилегающих сторон?
ну не сложно дописать для каждого угла поворота как брать стороны из массива..

Старый 16.04.2013, 18:08
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 7  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
а как же быть тогда?

Старый 16.04.2013, 18:09
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 8  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Хранить текущее состояние кубика?

Старый 16.04.2013, 18:25
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 9  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
Делаю так.
Код AS3:
private var combination= [[0, 4, 0, 0],
				   [2, 1, 5, 6],
   				   [0, 3, 0, 0],
				   [0, 6, 0, 0]];
 
 
 
public function changeDice(direct:String):void
{
     var vertical:Array = [combination[0][1], combination[1][1], combination[2][1], combination[3][1]];
     var horizontal:Array = [combination[1][0], combination[1][1], combination[1][2], combination[1][3]];
     var index:int;
 
      if(direct == "up") {
	 content.gotoAndStop(combination[2][1]);
	  index = combination[0][1];
 
	  combination[0][1] = vertical[1];
	  combination[1][1] = vertical[2];
	  combination[2][1] = vertical[3];
	  combination[3][1] = vertical[0];
 
	   combination[1][3] = index;
	}
 
	if(direct == "down") {
	   content.gotoAndStop(combination[0][1]);
  	   index = combination[2][1];
 
	   combination[0][1] = vertical[3];
	   combination[1][1] = vertical[0];
	   combination[2][1] = vertical[1];
	   combination[3][1] = vertical[2];
 
	   combination[1][3] = index;
	}
 
	if(direct == "right") {
	   content.gotoAndStop(combination[1][0]);
	   index = combination[1][2];
 
	   combination[1][0] = horizontal[3];
	   combination[1][1] = horizontal[0];
	   combination[1][2] = horizontal[1];
	   combination[1][3] = horizontal[2];
 
	   combination[1][3] = index;
 
	}
 
	if(direct == "left") {
	   content.gotoAndStop(combination[1][2]);
	   index = combination[1][0];
 
	   combination[1][0] = horizontal[1];
	   combination[1][1] = horizontal[2];
	   combination[1][2] = horizontal[3];
	   combination[1][3] = horizontal[0];
 
	   combination[3][1] = index;
	}
}
Но в один прекрасный момент кубик начинает переворачиватся на ту же грань. То есть не менять положение. Не могу понять в чём причина.

Старый 16.04.2013, 19:13
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 10  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Вот мой вариант.
Работает как часы.

Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
 
	public class Cube extends Sprite 
	{
 
		private var cubeFaces:Array = new Array();
		private var mainStage:Stage;
 
		public function Cube(mainStage:Stage) 
		{
			this.mainStage = mainStage;
			init();
		}
 
		private function init() : void
		{
			cubeFaces['face'] = 1;
			cubeFaces['back'] = 6;
			cubeFaces['left'] = 4;
			cubeFaces['right'] = 3;
			cubeFaces['top'] = 5;
			cubeFaces['bottom'] = 2;
 
			traceCube();
 
			mainStage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPressed);
		}	
 
		private function onKeyPressed(e: KeyboardEvent) : void 
		{
			var keyPressed:String;
			switch(e.keyCode)
			{
				case Keyboard.LEFT : 	// сдвиг face->left->back->right
										faceShifter("face->left->back->right");
										keyPressed = "LEFT";
										break;
 
				case Keyboard.RIGHT : 	// сдвиг face->right->back->left
										faceShifter("face->right->back->left");
										keyPressed = "RIGHT";
										break;
 
				case Keyboard.UP : 		// сдвиг face->top->back->bottom
										faceShifter("face->top->back->bottom");
										keyPressed = "UP";
										break;
 
				case Keyboard.DOWN : 	// сдвиг face->bottom->back->top
										faceShifter("face->bottom->back->top");
										keyPressed = "DOWN";
										break;
			}
 
			if (keyPressed)
			{
				trace("keyPressed:", keyPressed);
				traceCube();
			}
		}
 
 
		private function faceShifter(shiftRule:String) : void
		{
			var facesForShift:Array = shiftRule.split("->");
			var savingFace:int = cubeFaces[facesForShift[3]];
			for (var i:int = 2; i > -1; i--) 
			{
				cubeFaces[facesForShift[i+1]] = cubeFaces[facesForShift[i]];
			}
			cubeFaces[facesForShift[0]] = savingFace;
		}
 
		private function traceCube() : void
		{
			trace(" ", cubeFaces["top"], " ");
			trace(cubeFaces["left"], cubeFaces["face"], cubeFaces["right"]);
			trace(" ", cubeFaces["bottom"], " ");
			trace(" ", cubeFaces["back"], " ");
		}
 
 
	}
 
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:30.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:30.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.