Быстро моргает меню при удержании клавиши - Форум Игроделов
Пн, 10 Фев 2025, 11:24 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Быстро моргает меню при удержании клавиши
BalgasДата: Пн, 06 Май 2013, 03:21 | Сообщение # 1
Нет аватара
 
Сообщений: 5
Награды: 0
Репутация: 0
Статус: Offline
Здравствуйте. Пользуюсь: if (Event.current.type == EventType.KeyUp && Event.current.keyCode.Escape) { } для открытия и закрытия меню. Хотелось бы подправить реакцию кода на нажатие Down и в принципе это работает но проблема в том что при удержании кнопки, меню начинает очень быстро открываться и закрываться - типо моргать. Пробовал различные заглушки - это меня не спасло sad Не подскажите как избавится от этого эффекта?
 
СообщениеЗдравствуйте. Пользуюсь: if (Event.current.type == EventType.KeyUp && Event.current.keyCode.Escape) { } для открытия и закрытия меню. Хотелось бы подправить реакцию кода на нажатие Down и в принципе это работает но проблема в том что при удержании кнопки, меню начинает очень быстро открываться и закрываться - типо моргать. Пробовал различные заглушки - это меня не спасло sad Не подскажите как избавится от этого эффекта?

Автор - Balgas
Дата добавления - 06 Май 2013 в 03:21
AIDENДата: Пн, 06 Май 2013, 08:53 | Сообщение # 2
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
Незнаю, у меня например было всё попроще.
Код
function Update() {
if (Input.GetKeyDown(KeyCode.Escape)) {
//Твоя функцыя
}
else {//При нажатии на кнопку вторый раз, функцыя действует наоборот
//Твоя функцыя наоборот
}
}


Моя игра - Collect Fruit
 
СообщениеНезнаю, у меня например было всё попроще.
Код
function Update() {
if (Input.GetKeyDown(KeyCode.Escape)) {
//Твоя функцыя
}
else {//При нажатии на кнопку вторый раз, функцыя действует наоборот
//Твоя функцыя наоборот
}
}

Автор - AIDEN
Дата добавления - 06 Май 2013 в 08:53
seamanДата: Пн, 06 Май 2013, 11:20 | Сообщение # 3
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Цитата
Не подскажите как избавится от этого эффекта?

Подскажу - написать что внутри { }
 
Сообщение
Цитата
Не подскажите как избавится от этого эффекта?

Подскажу - написать что внутри { }

Автор - seaman
Дата добавления - 06 Май 2013 в 11:20
BalgasДата: Пн, 06 Май 2013, 22:29 | Сообщение # 4
Нет аватара
 
Сообщений: 5
Награды: 0
Репутация: 0
Статус: Offline
AIDEN спасибо большое, сейчас мне тоже подсказали что лучше всего проще сделать, точно так же как ты написал и в принципе это работает. Спасибо большое парни. Ради интереса можно разобрать почему же так было.
Код что переваривался внутри:

Простите за криворукость, я только - только постигаю азы я.п.

Добавлено (06 Май 2013, 22:29)
---------------------------------------------
Ещё одну особенность заметил что когда что-то заполняешь как на скриншоте, код отказывается работать. Нужно прописывать дополнительное условие для этого?


Сообщение отредактировал Balgas - Пн, 06 Май 2013, 17:27
 
СообщениеAIDEN спасибо большое, сейчас мне тоже подсказали что лучше всего проще сделать, точно так же как ты написал и в принципе это работает. Спасибо большое парни. Ради интереса можно разобрать почему же так было.
Код что переваривался внутри:

Простите за криворукость, я только - только постигаю азы я.п.

Добавлено (06 Май 2013, 22:29)
---------------------------------------------
Ещё одну особенность заметил что когда что-то заполняешь как на скриншоте, код отказывается работать. Нужно прописывать дополнительное условие для этого?


Автор - Balgas
Дата добавления - 06 Май 2013 в 22:29
commandobyДата: Пн, 06 Май 2013, 22:57 | Сообщение # 5
Unity 3D Free
 
Сообщений: 836
Награды: 3
Репутация: 211
Статус: Offline
Может не сработать, так как писал на форуме, но попробовать стоит.
Код
var a : boolean = false;
var b : boolean = true;

function Update () {
if (a == true) {  
//сюда свой код, когда меню открыто
}
if (a == false && b == true) {  
if (Input.GetKeyDown(KeyCode.Escape)) {  
a = true;
b = false;
}
}
if (a == true && b == true) {  
if (Input.GetKeyDown(KeyCode.Escape)) {  
a = false;
b = false;
}
}
if (Input.GetKeyUp(KeyCode.Escape)) {  
b = true;
}
}


Блог.
 
СообщениеМожет не сработать, так как писал на форуме, но попробовать стоит.
Код
var a : boolean = false;
var b : boolean = true;

function Update () {
if (a == true) {  
//сюда свой код, когда меню открыто
}
if (a == false && b == true) {  
if (Input.GetKeyDown(KeyCode.Escape)) {  
a = true;
b = false;
}
}
if (a == true && b == true) {  
if (Input.GetKeyDown(KeyCode.Escape)) {  
a = false;
b = false;
}
}
if (Input.GetKeyUp(KeyCode.Escape)) {  
b = true;
}
}

Автор - commandoby
Дата добавления - 06 Май 2013 в 22:57
AIDENДата: Ср, 08 Май 2013, 09:16 | Сообщение # 6
Нет аватара
 
Сообщений: 59
Награды: 0
Репутация: 56
Статус: Offline
balgas, незачто, спрашуй помогу:)

Моя игра - Collect Fruit
 
Сообщениеbalgas, незачто, спрашуй помогу:)

Автор - AIDEN
Дата добавления - 08 Май 2013 в 09:16
BalgasДата: Вс, 12 Май 2013, 06:17 | Сообщение # 7
Нет аватара
 
Сообщений: 5
Награды: 0
Репутация: 0
Статус: Offline
Ребят тут это не в тему но возможно подскажите что нибудь, поделитесь опытом... Уже вот практически все готово в мультике. Хорошая синхронизация, настроенные проигрыши анимации и звуков, готов GUI бла бла бла... а от одной траблы все ну никак избавится не получается. Глядя на то что люди делают взял у каждого понемногу, собрал в единую кучу и написал свой мульт где создание сервера происходит в одной сцене а играем уже в другой, аналогично и с подключением - сервер выбираем в одной сцене а подключаемся и играем в другой (если что-то не так то на экран выпадают ошибки с описанием проблеммы). Когда префаб игрока от сервера уже заспавнен то при загрузке сцены и подключения, у клиента (ещё до спавна своего префаба) выбивает в консоль редактора следующие ошибки:
1-я) View ID SceneID: 5 Level Prefix: 0 not found during lookup. Strange behaviour may occur
2-я) Received state update for view id' SceneID: 5 Level Prefix: 0' but the NetworkView doesn't exist
Если честно, я примерно представляю что они означают но не понимаю как их исправить. Про первую ошибку я вообще без понятия хоть и перекопал гугл. В следующей двиг ругается на то что не может присвоить полученный ID игроку (или от игрока) так как нет компонента NetworkView хотя на прифабе игроков их больше одного + 1 пустой. Знаю что это не желательно... Из-за всего этого подключенный клиент, не видит префаб сервера после спавна, а если спавн был уже после подключения - все работает как надо. Так же и следующий клиент после коннекта не видит предыдущих, уже подключившихся игроков хотя у них он отображается и нормально синхронизируется. Тупо не понимаю что от меня хочет двиг и что нужно сделать. Сейчас RPC функции практически не знаю.

Подскажите что нибудь?


Сообщение отредактировал Balgas - Вс, 12 Май 2013, 06:27
 
СообщениеРебят тут это не в тему но возможно подскажите что нибудь, поделитесь опытом... Уже вот практически все готово в мультике. Хорошая синхронизация, настроенные проигрыши анимации и звуков, готов GUI бла бла бла... а от одной траблы все ну никак избавится не получается. Глядя на то что люди делают взял у каждого понемногу, собрал в единую кучу и написал свой мульт где создание сервера происходит в одной сцене а играем уже в другой, аналогично и с подключением - сервер выбираем в одной сцене а подключаемся и играем в другой (если что-то не так то на экран выпадают ошибки с описанием проблеммы). Когда префаб игрока от сервера уже заспавнен то при загрузке сцены и подключения, у клиента (ещё до спавна своего префаба) выбивает в консоль редактора следующие ошибки:
1-я) View ID SceneID: 5 Level Prefix: 0 not found during lookup. Strange behaviour may occur
2-я) Received state update for view id' SceneID: 5 Level Prefix: 0' but the NetworkView doesn't exist
Если честно, я примерно представляю что они означают но не понимаю как их исправить. Про первую ошибку я вообще без понятия хоть и перекопал гугл. В следующей двиг ругается на то что не может присвоить полученный ID игроку (или от игрока) так как нет компонента NetworkView хотя на прифабе игроков их больше одного + 1 пустой. Знаю что это не желательно... Из-за всего этого подключенный клиент, не видит префаб сервера после спавна, а если спавн был уже после подключения - все работает как надо. Так же и следующий клиент после коннекта не видит предыдущих, уже подключившихся игроков хотя у них он отображается и нормально синхронизируется. Тупо не понимаю что от меня хочет двиг и что нужно сделать. Сейчас RPC функции практически не знаю.

Подскажите что нибудь?

Автор - Balgas
Дата добавления - 12 Май 2013 в 06:17
игнатДата: Вс, 12 Май 2013, 12:32 | Сообщение # 8
 
Сообщений: 706
Награды: 0
Репутация: 107
Статус: Offline
Мда... вы так хорошо всё расписали, но на чём нам гадать, на кофе или как?


Правила форума · участник GCC
 
СообщениеМда... вы так хорошо всё расписали, но на чём нам гадать, на кофе или как?

Автор - игнат
Дата добавления - 12 Май 2013 в 12:32
BalgasДата: Ср, 15 Май 2013, 09:02 | Сообщение # 9
Нет аватара
 
Сообщений: 5
Награды: 0
Репутация: 0
Статус: Offline
Половина кода мультиплеера разбросана по коду основного меню, я его месяц буду собирать. Вот другая половина отвечающая за спавн
Код

var Player : Transform;
var spawnObject: Transform;

var guiEnter : GUISkin;
var sound : AudioClip;
var Loading : GameObject;
var Enter = 1;

private var hostData : HostData[];

function OnNetworkLoadedLevelServer () {
//    Network.Instantiate(Player, spawnObject.position, Quaternion.identity, 0);
Network.Instantiate(Player, transform.position, transform.rotation, 10);
Debug.Log("Server: Spawn Player");
}
function OnNetworkLoadedLevelClient () {
//    Network.Instantiate(Player, spawnObject.position, Quaternion.identity, 0);
Network.Instantiate(Player, transform.position, transform.rotation, 10);
Debug.Log("Client: Spawn Player");
}

function OnPlayerConnected(Player: NetworkPlayer) {
Debug.Log("Player " + playerCount++ + " connected from " + Player.ipAddress + ":" + Player.port);
}

function OnPlayerDisconnected (player : NetworkPlayer) {
Debug.Log("Disconnecting: " + Network.connections[0].ipAddress+ ":" + Network.connections[0].port);
Network.RemoveRPCs(player, 0);
Network.DestroyPlayerObjects(player);
}

function OnConnectedToServer() {
if(Network.isServer) {
OnNetworkLoadedLevelServer();
}
if(Network.isClient) {
OnNetworkLoadedLevelClient();
}
}
function OnMasterServerEvent(mse:MasterServerEvent) {
if (mse == MasterServerEvent.RegistrationSucceeded) {
}
}

function OnGUI() {
if (Enter == 1) {
GUI.skin = guiEnter;
if(GUI.Button(Rect (Screen.width/2 - -325,Screen.height/2 - -225,54,30), "")) {
if(Input.GetMouseButtonUp(0)){
OnConnectedToServer();
audio.clip = sound;
audio.Play();
Enter = 0;
Loading.guiTexture.enabled = false;
gameObject.Find("Loading").GetComponent("AudioListener").enabled = false;
gameObject.Find("Camera").GetComponent("Interface").enabled = true;
gameObject.Find("Camera").GetComponent("Interface_Chat").enabled = true;
}
}
}
}

Добавлено (15 Май 2013, 04:35)
---------------------------------------------
Поискал, ошибка потому что NetworkView не существует на данный момент в сцене. Нужно сделать ожидание загрузки сцены полностью, прежде чем принимать сообщения по сети.

Добавлено (15 Май 2013, 09:02)
---------------------------------------------
Проблему решил, на мое удивление - просто.

Сообщение отредактировал Balgas - Вс, 12 Май 2013, 13:30
 
СообщениеПоловина кода мультиплеера разбросана по коду основного меню, я его месяц буду собирать. Вот другая половина отвечающая за спавн
Код

var Player : Transform;
var spawnObject: Transform;

var guiEnter : GUISkin;
var sound : AudioClip;
var Loading : GameObject;
var Enter = 1;

private var hostData : HostData[];

function OnNetworkLoadedLevelServer () {
//    Network.Instantiate(Player, spawnObject.position, Quaternion.identity, 0);
Network.Instantiate(Player, transform.position, transform.rotation, 10);
Debug.Log("Server: Spawn Player");
}
function OnNetworkLoadedLevelClient () {
//    Network.Instantiate(Player, spawnObject.position, Quaternion.identity, 0);
Network.Instantiate(Player, transform.position, transform.rotation, 10);
Debug.Log("Client: Spawn Player");
}

function OnPlayerConnected(Player: NetworkPlayer) {
Debug.Log("Player " + playerCount++ + " connected from " + Player.ipAddress + ":" + Player.port);
}

function OnPlayerDisconnected (player : NetworkPlayer) {
Debug.Log("Disconnecting: " + Network.connections[0].ipAddress+ ":" + Network.connections[0].port);
Network.RemoveRPCs(player, 0);
Network.DestroyPlayerObjects(player);
}

function OnConnectedToServer() {
if(Network.isServer) {
OnNetworkLoadedLevelServer();
}
if(Network.isClient) {
OnNetworkLoadedLevelClient();
}
}
function OnMasterServerEvent(mse:MasterServerEvent) {
if (mse == MasterServerEvent.RegistrationSucceeded) {
}
}

function OnGUI() {
if (Enter == 1) {
GUI.skin = guiEnter;
if(GUI.Button(Rect (Screen.width/2 - -325,Screen.height/2 - -225,54,30), "")) {
if(Input.GetMouseButtonUp(0)){
OnConnectedToServer();
audio.clip = sound;
audio.Play();
Enter = 0;
Loading.guiTexture.enabled = false;
gameObject.Find("Loading").GetComponent("AudioListener").enabled = false;
gameObject.Find("Camera").GetComponent("Interface").enabled = true;
gameObject.Find("Camera").GetComponent("Interface_Chat").enabled = true;
}
}
}
}

Добавлено (15 Май 2013, 04:35)
---------------------------------------------
Поискал, ошибка потому что NetworkView не существует на данный момент в сцене. Нужно сделать ожидание загрузки сцены полностью, прежде чем принимать сообщения по сети.

Добавлено (15 Май 2013, 09:02)
---------------------------------------------
Проблему решил, на мое удивление - просто.


Автор - Balgas
Дата добавления - 15 Май 2013 в 09:02
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2025