Форум 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,112
Записей в блоге: 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, 18:08
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 6  
Ответить с цитированием
Wadimir

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

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

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

Старый 16.04.2013, 18:25
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 8  
Ответить с цитированием
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
  № 9  
Ответить с цитированием
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"], " ");
		}
 
 
	}
 
}

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

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

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

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

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


 


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


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