Retour à l'accueil
Accueil Aide Rechercher Calendrier Identifiez-vous Inscrivez-vous
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
20 Novembre 2018 à 00:41

Connexion avec identifiant, mot de passe et durée de la session
Règlement | Grades du forum | L'équipe de modération | Album photo | Chat
Rechercher:     avancée
Forums Zelda Solarus  |  Jeux amateurs  |  Aide & support  |  Sujet: [solarus] récuperer la touche auquel un objet est assigné ? 0 Membres et 1 Invité sur ce sujet.
Pages: [1] Imprimer
Auteur Sujet: [solarus] récuperer la touche auquel un objet est assigné ?  (Lu 5044 fois)
MetalZelda
Zora
*
Hors ligne Hors ligne

Messages: 833



« le: 23 Octobre 2015 à 00:46 »

Salut toutes les tous

je rencontre actuellement quelques difficulté dans la création d'item et deux questions me taraudes.

Code:
function game:on_key_released(key)
local bow_state = game:get_value("bow_state")
local can_fire = game:get_value("can_shoot")
local handled = false
local map = game:get_map()
local hero = map:get_hero()

if key == "x" and bow_state == 1 and item:get_amount() == 0 and can_fire == true and not game:is_suspended() then
 hero:set_tunic_sprite_id("hero/item/bow_shoot_tunic1")
 sol.audio.play_sound("/items/bow/no_arrows_shoot")
 hero:freeze()
-- can't shoot arrows, but reset to state 1
sol.timer.start(100, function()
   game:set_value("bow_state", 1)
game:set_value("can_shoot", false)
hero:set_tunic_sprite_id("hero/item/bow_moving_free_tunic1")
hero:unfreeze()
game:set_pause_allowed(true)
end)
elseif key == "x" and bow_state == 1 and item:get_amount() > 0 and can_fire == true and not game:is_suspended() then
 hero:set_tunic_sprite_id("hero/item/bow_shoot_tunic1")
shoot_arrow()
hero:freeze()
sol.timer.start(100, function()
game:set_value("bow_state", 1)
game:set_value("can_shoot", false)
hero:unfreeze()
hero:set_walking_speed(40)
hero:set_tunic_sprite_id("hero/item/bow_moving_free_tunic1")
game:set_pause_allowed(true)
end)
end
end

Comme vous pouvez le voir ici, le script check si la touche X est relachée si et seulement si une valeure est rencontrée afin de lancer le processus.
Mais le probleme, et ce que j'ai pas pu trouver sur l'API, c'est que je cherche a stocker ou a trouver une fonction qui permet de recuperer le slot actuel (donc la touche) de l'item afin de remplacer ce "x".

game:get_item_assigned(1) retourne juste le nom de l'item qui occupe le slot 1 et 2 et ca m'aide pas beaucoup

2) Existe t-il un moyen de désactiver des fonctions du héros ? Par exemple lui enlever l'abilité de pousser / tirer / ouvrir / interragir avec quelque chose en quelque sorte
Journalisée
Christopho
Administrateur
Héros
*
Hors ligne Hors ligne

Messages: 6 184


Mymy, je t'aime :)


WWW
« Répondre #1 le: 23 Octobre 2015 à 08:38 »

1) Tu peux facilement faire cette fonction. Elle n'a qu'à appeller game:get_item_assigned(1) et game:get_item_assigned(2) et regarder si l'un des deux est l'item que tu cherchese.
2) Un moyen de le faire est de désactiver la commande "action". Je le fais dans Zelda ROTH quand je transforme Link en lapin.
Journalisée

Solarus Games : créez votre jeu avec Solarus
Chaîne Twitch : sessions de live-coding, live-making, live-playing
Chaîne YouTube : tutos Solarus, replays des live-streamings. vidéos d'échecs
Compte Twitter : pour être au courant des streamings
MetalZelda
Zora
*
Hors ligne Hors ligne

Messages: 833



« Répondre #2 le: 23 Octobre 2015 à 13:45 »

1) Tu peux facilement faire cette fonction. Elle n'a qu'à appeller game:get_item_assigned(1) et game:get_item_assigned(2) et regarder si l'un des deux est l'item que tu cherchese.
2) Un moyen de le faire est de désactiver la commande "action". Je le fais dans Zelda ROTH quand je transforme Link en lapin.

pour la solution 1 je vois pas trop comment faire, j'ai essayer une variable local qui stock l'info si l'item est dans un slot mais ca fonctionne pas, j'ai essayer dans une fonction a pars, puis directement dans la fonction on_key_pressed

edit : ca marche pour la solution 2, sauf qu'il peut toujours pousser lorsqu'on reste appuyé sur un mur, encore c'est pas génant et c'est contournable  Mister Green
« Dernière édition: 23 Octobre 2015 à 14:08 par MetalZelda » Journalisée
Christopho
Administrateur
Héros
*
Hors ligne Hors ligne

Messages: 6 184


Mymy, je t'aime :)


WWW
« Répondre #3 le: 23 Octobre 2015 à 14:32 »

Code:
function game:get_item_slot(item)
for i = 1, 2 do
  if game:get_item_assigned(i) == item then
  return i
end
return nil
Journalisée

Solarus Games : créez votre jeu avec Solarus
Chaîne Twitch : sessions de live-coding, live-making, live-playing
Chaîne YouTube : tutos Solarus, replays des live-streamings. vidéos d'échecs
Compte Twitter : pour être au courant des streamings
MetalZelda
Zora
*
Hors ligne Hors ligne

Messages: 833



« Répondre #4 le: 23 Octobre 2015 à 16:11 »

Code:
function game:get_item_slot(item)
for i = 1, 2 do
  if game:get_item_assigned(i) == item then
  return i
end
return nil

ca fonctionne uniquement pour l'input "x", quand j'appuie sur "v" (meme avec une condition qui dit que si i == 1 ou 2 alors la valeur key aura comme valeure "x" ou "y"), etrange  ahuri

J'utilise game:on_key_pressed si ca peut aider

edit : j'ai essayer une verif avec print et tout les items sont noté en slot 1  ahuri
« Dernière édition: 23 Octobre 2015 à 20:04 par MetalZelda » Journalisée
Cvvsw
Bourgeon Mojo
*
Hors ligne Hors ligne

Messages: 3


« Répondre #5 le: 29 Janvier 2016 à 07:59 »

Coool ! Merci pour votre avis, je vais le bien essayer! Merci en retard!







coque google nexus 5X coque google nexus 5X
« Dernière édition: 20 Février 2016 à 03:57 par Cvvsw » Journalisée
Pages: [1] Imprimer 
Forums Zelda Solarus  |  Jeux amateurs  |  Aide & support  |  Sujet: [solarus] récuperer la touche auquel un objet est assigné ?
Aller à:  

Propulsé par MySQL Propulsé par PHP Powered by SMF 1.1.20 | SMF © 2006, Simple Machines XHTML 1.0 Transitionnel valide ! CSS valide !
Zelda Solarus 2009Skin par Eidarloy
www.zelda-solarus.com