Please login or register.

Login with username, password and session length
Advanced search  

News:

IRC channel - server: waelisch.de  channel: #wme (read more)

Pages: 1 [2]  All

Author Topic: Interacciones, cambios de sprite, objetos e inventario.  (Read 12751 times)

0 Members and 1 Guest are viewing this topic.

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #15 on: January 22, 2011, 12:03:30 AM »

Bueno, pues ya está solucionado el misterio de la basura que no quería ser interactiva. Os dejo el relato de los hechos por si a alguien más le pasa algo similar. El problema era que había definidas dos entities en la misma zona de la pantalla en la que se encontraba la famosa basura (una sprite entity y una region entity). La región entity no estaba marcada como activa y por tanto no era interactiva con el ratón y además estaba puesta más abajo que la sprite entity en el árbol de nodos. Cuando el motor de WME pinta los nodos en la pantalla lo hace siguiendo el árbol, empezando por el que está más arriba y terminando por el que está más abajo. Esto hacía que la region entity (al estar más abajo) quedase pintada encima de la sprite entity y por lo tanto no se pudiese interactuar con la sprite entity que estaba oculta debajo de la region entity. Espero haberme explicado... La solución es tan sencilla como mover la region entity en el árbol de nodos justo encima de la sprite entity aunque, dado que nunca se marcaba como activa, si no se va a usar la region entity para nada yo la borraría para evitar consumos innecesarios de memoria.

Lo que no entiendo es porque nada más cargar el juego sí que te deja interactuar con la sprite entity pero eso creo que sólo Mnemonic podría explicárnoslo  ;D

Es fundamental que os leáis la ayuda de WME para entender este tipo de cosas y no volveros locos. Al menos deberíais leer la parte del tutorial en la que se explica como se crea una escena paso a paso, ya que ahí están muy bien explicadas todas estas cosas (y no es excusa no saber inglés que para eso me molesté yo en su día en traducir esa parte al español).

Un saludo.

« Last Edit: January 22, 2011, 12:07:55 AM by Jose »
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #16 on: January 23, 2011, 09:47:56 PM »

He leido todo el tutorial. Un par de veces. Lo que pasa es que se olvidan algunas cosillas, y claro, como la region estaba desactivada, pensaba que era inútil y no estorbaría. Una vez borrada, no hay problemas.
De todas formas, lo leeré todo de nuevo. Para que no haya mas dudas de este tipo.
Gracias por todo. Seguiré preguntando.
1 abrazo!
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #17 on: January 24, 2011, 05:25:01 PM »

vale, otro problema:
Quiero, mediante un puzzle, echar agua al fuego, que este se apague y queden ascuas (conseguido).
tambien quiero colocar sobre una estreves un trozo de papel albal que tengo en el inventario, para poder colocar ahí las ascuas. y aquí es donde surge el problema.

Si no me equivoco mucho, debo poner un evento llamado on "albal" en el script de la estreves. Y en el script del albalvacio (el de la scene) he puesto this.active = false al principio, con lo cual consigo que no se vea al principio de la scene. El problema surge cuando quiero ponerlo en true desde el script de la estreves. Tambien he quitado en el editor de escenas el item, para poder hacer que aparezca y desaparezca de manera manual mediante el código (como me sugirió Juan Bonair hace tiempo).

Pues bien, resulta que no sé cómo poner el albalvacio.active = true, para que aparezca cuando combino el albal con la esteves. Me da el siguiente error:
Quote
17:03:27:  Compiling script 'scenes\new_scene\scr\estreves.script'...
17:03:27:    Error@line 33: Variable 'albalvacio' is referenced but not defined
¿por qué no está definido? ¿cómo lo defino? os dejo los 3 scripts, el de la estreves, el del item albal, y el del objeto de la escena albalvacio.

esteves:
Code: [Select]
#include "scripts\base.inc"



////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
  actor.TurnTo(this);
  actor.Talk("Es una estreves.");
  actor.Talk("Suele usarse para poner cosas calientes encima.");
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  actor.TurnTo(this);
  actor.Talk("Está bien ahí.");
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.Talk("No me da la gana.");
}
////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
}
////////////////////////////////////////////////////////////////////////////////
on "albal"
{
  actor.TurnTo(this);
  Game.DropItem("albal");
  albalvacio.Active = true;
}

Item albal:
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
  actor.Talk("Papel albal. Del coco.");
}

////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  Game.SelectedItem = "albal";
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.Talk("paso.");
}

albalvacio de la scene:
Code: [Select]
#include "scripts\base.inc"


this.Active = false;
////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
  actor.TurnTo(this);
  actor.Talk("El trozo de papel albal está colocado encima de la estreves.");
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
actor.GoToObject(this);
  actor.PlayAnim("actors\molly\ur\take1.sprite");
  Game.TakeItem("albal");
  this.Active = false;
  actor.PlayAnim("actors\molly\ur\take2.sprite");
  actor.Talk("pa la saca.");
}

////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.Talk("No.");
}
////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
}
Lo peor del asunto es que seguro que es una tontada donde está el fallo... ::slug
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #18 on: January 27, 2011, 10:12:41 AM »

Si el albalvacio está definido en la scene como una entity (que no sea free) debes usar Scene.GetNode("albalvacio"), con lo que el código de estreves quedaría similar a este:

Code: [Select]
#include "scripts\base.inc"



////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
  actor.TurnTo(this);
  actor.Talk("Es una estreves.");
  actor.Talk("Suele usarse para poner cosas calientes encima.");
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  actor.TurnTo(this);
  actor.Talk("Está bien ahí.");
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.Talk("No me da la gana.");
}
////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
}
////////////////////////////////////////////////////////////////////////////////
on "albal"
{
  var albalEntity = Scene.GetNode("albalvacio");
  actor.TurnTo(this);
  Game.DropItem("albal");
  albalEntity.Active = true;
}

No lo he probado pero creo que así debería de funcionarte. Por cierto, si tuvieses definido albalvacio como una free entity entonces tendrías que usar Scene.GetFreeNode("albalvacio")

Un saludo.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #19 on: January 27, 2011, 06:29:06 PM »

ok, eso solucionado. Y ahora, me surge otro problema:
Para que no aparezca el albal sobre la estreves, en el script albalvacio tengo puesto al principio "this.Active = false;" y luego, desde la estreves, lo activo y sale. Hasta aquí bien. Pero el problema viene al salir de la scene y volver a entrar. Supongo que vuelve a cargar el script de albalvacio y, por consiguiente, vuelve a ponerse en "this.Active = false;" con lo que desaparece.

La próxima vez simplemente lo haré cambiando el sprite de la estreves por otro sprite que salga la estreves con el albal, y así será mas sencillo y dará menos problemas.

Pero ya puestos en faena, me gustaría que me dieseis alguna idea de cómo conseguir que el albal no desaparezca por este método, para aprender un poco más, vaya. Por si hiciese falta en otro momento.

Que guai! ya localizo los problemas, veo algunas soluciones (solo algunas), voy entendiendo el lenguaje... poco a poco, pero avanzando. ::rock
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #20 on: January 28, 2011, 09:14:21 AM »

Si albalvacio lo tienes definido como una entity de la scene quita la línea this.Active = false del script. Para que al principio no aparezca el albal simplemente márcalo como no activo en tiempo de diseño (quita el check del cuadradito blanco que sale a la izquierda del nombre de la entity en el árbol de nodos). De esta forma será el motor de WME el encargado de recordar el estado de cada nodo cuando salgas de la escena de modo que si saliste con él activo, volverá a estar activo cuando regreses mientras que si saliste con él inactivo así estará a tu vuelta.

Un saludo.
Logged

novato

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 2
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #21 on: January 28, 2011, 06:06:23 PM »

ola a todo, me acabode descargar el programa, ero ya ñllevo intentando haceralgo 3horas y no lo consigo, nosenada de estos temas pero me gustaria saber, me podrias poner una guia? hos estaria agradecido
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #22 on: January 28, 2011, 07:15:57 PM »

Te aconsejo que empieces por leerte el tutorial que viene con la ayuda del programa...
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #23 on: January 28, 2011, 07:57:58 PM »

Vale, conseguido. ::rock otro problemilla:
Una vez apagado el fuego (sprite fuegooff) quiero, con unas tenazas, sacar ascuas y ponerlas en el albal. pero claro, solo quiero que las ponga cuando el albal esté visible, y que diga que no puede cuando no esté aún puesto el albal en su sitio. Y aquí es donde me surge el problema. Si fuera un sprite de "no albal", otro sprite de "albal" y otro de "albalascuas" podría hacerlo al igual que con la basura, la chimenea o la fuente. Pero claro, el albal está o no está dependiendo de si está visible la Entity albal, y no sé jugar con esa variable. He probado de varias formas, pero no encuentro el "método", "llamada" o "orden" que lo defina para que, en función de que esté o no activo el albal sobre la estrevez, haga unas cosas un otras.
Aquí os dejo el código. Se que, al menos, la linea 89 está mal, ya que no es un sprite el albal entity... en fin, a ver si sois capaces de aclararme un poco este aspecto de la programación.
Code: [Select]
#include "scripts\base.inc"


////////////////////////////////////////////////////////////////////////////////
on "LookAt"
{
 Game.Msg(this.GetSprite());  //Nos muestra en la parte superior izquierda del juego el nombre del sprite asignado a esta entidad
 Game.Interactive = false;
 
  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
  case "scenes\new_scene\fuegoon.sprite":    // Si la fuente tiene su "sprite" por defecto.
  actor.TurnTo(this);
   actor.Talk("El fuego ese está muy fuerte.");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\new_scene\fuegooff.sprite":    // Si la fuente ya tiene su otro "sprite".
  actor.TurnTo(this);
actor.Talk("Solo han quedado algunas ascuas en el fondo.");
break;
   
default:   //Si el sprite asignado no es ni fuegoon ni fuegooff
   actor.Talk("Parece que el sprite asignado no es ninguno de los anteriores.");
   }
   Game.Interactive = true;
}
////////////////////////////////////////////////////////////////////////////////
on "Take"
{
  actor.TurnTo(this);
  actor.Talk("Si, claro que si. ahora mismo lo cojo.");
  actor.Talk("¿Con la mano o con la boca, Torrente?");
}
////////////////////////////////////////////////////////////////////////////////
on "Talk"
{
  actor.TurnTo(this);
  actor.Talk("Fueguecito fueguecito, mira que estás calentito.");
}


////////////////////////////////////////////////////////////////////////////////
on "LeftClick"
{
  actor.GoToObject(this);
}
on "jarrolleno"
{
 Game.Interactive = false;
 actor.GoToObject(this);

  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
  case "scenes\new_scene\fuegoon.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.Talk("Ahí va.");
actor.PlayAnim("actors\molly\ur\take1.sprite");
    this.SetSprite("scenes\new_scene\fuegooff.sprite");    // Asignarle otro "sprite".
Game.DropItem("jarrolleno");
Game.TakeItem("jarro");
actor.PlayAnim("actors\molly\ur\take2.sprite");
actor.Talk("Ala, el fuego apagado.");
break;    // ¡Línea importante! Nunca la olvides.

  case "scenes\new_scene\fuegooff.sprite":    // Si la fuente ya tiene su otro "sprite".
    actor.Talk("Ya está suficientemente bien apagado.");
break;
  }
   Game.Interactive = true;
}

on "jarro"
{
actor.Talk("El jarro está vacío. No serviría de mucho.");
}
////////////////////////////////////////////////////////////////////////////////
on "tenazas"
{
 var albalEntity = Scene.GetNode("albalvacio");
 Game.Interactive = false;
 
  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
case "scenes\new_scene\fuegoon.sprite":    // Si la fuente tiene su "sprite" por defecto.
  actor.TurnTo(this);
   actor.Talk("El fuego está muy fuerte. No puedo usar las tenazas ahí.");
break;    // ¡Línea importante! Nunca la olvides.

case "scenes\new_scene\fuegooff.sprite":    // Si la fuente ya tiene su otro "sprite".
   switch(albalEntity.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
  case "scenes\new_scene\albalvacio.sprite":    // Si la fuente ya tiene su otro "sprite".
  actor.GoToObject(this);
actor.Talk("Voy a sacar unas ascuas en el papel albal.");
actor.Talk("Y espero que el papel albal esté en su sitio.");
break;
   
   default:    // Si la fuente tiene su "sprite" por defecto.
  actor.TurnTo(this);
   actor.Talk("No tengo dónde colocar las ascuas una vez cogidas.");
break;    // ¡Línea importante! Nunca la olvides.
   }
   }
   Game.Interactive = true;
}
Un abrazo.
Logged

novato

  • Lurker
  • *
  • Karma: 0
  • Offline Offline
  • Posts: 2
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #24 on: January 28, 2011, 10:13:37 PM »

gracias por contestar jose, ya lo leí, pero yo me referia haber si teniais un ejemplo de juego en el qe me va esplicando paso a paso como crearlo , teneis? os lo agradeceria  :)
un abrazo
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #25 on: January 29, 2011, 09:12:47 AM »

Me temo que de eso no hay nada más que lo que viene en el tutorial de la ayuda. En este link http://res.dead-code.org/doku.php/wmebook:start tienes otro tutorial tal vez algo más detallado pero no está completo, mira a ver si te sirve de algo.

Un saludo.
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #26 on: January 29, 2011, 09:27:02 AM »

Si preguntas por el sprite asignado a la entity albalvacio siempre te va a dar lo mismo puesto que, por lo que he visto, no cambias dicho sprite en ningún momento. Lo que debes hacer es preguntar si la entity está visible (Active==true) o no (Active==false). El código del método tenazas quedaría algo así (no lo he probado pero creo que debería servirte para lo que quieres):

Code: [Select]
////////////////////////////////////////////////////////////////////////////////
on "tenazas"
{
 var albalEntity = Scene.GetNode("albalvacio");
 Game.Interactive = false;
 
  switch(this.GetSprite())    //  Establecemos el "sprite" de la fuente como variable a comparar.
  {
   case "scenes\new_scene\fuegoon.sprite":    // Si la fuente tiene su "sprite" por defecto.
    actor.TurnTo(this);
    actor.Talk("El fuego está muy fuerte. No puedo usar las tenazas ahí.");
    break;    // ¡Línea importante! Nunca la olvides.

   case "scenes\new_scene\fuegooff.sprite":    // Si la fuente ya tiene su otro "sprite".
    if(albalEntity.Active==true)   
    {
      actor.GoToObject(this);
      actor.Talk("Voy a sacar unas ascuas en el papel albal.");
      actor.Talk("Y espero que el papel albal esté en su sitio.");
    }
    else
    {
      actor.TurnTo(this);
      actor.Talk("No tengo dónde colocar las ascuas una vez cogidas.");
    } 
  }

 Game.Interactive = true;
}

Un saludo.
Logged

bamyito

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 53
  • Aprendoaprendoaprendo...
    • View Profile
Re: Interacciones, cambios de sprite, objetos e inventario.
« Reply #27 on: January 29, 2011, 06:11:58 PM »

Tio, te quiero. ;D
Sigo investigando estas cosas. Aunque ahora es el tema de los diálogos el que me da problemas.  ::slug
Pero weno, cada tema en su post.

 ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock ::rock

Amigo novato, sé lo frustrante que es iniciarse aquí (yo aún estoy en ello). Aquí te dejo el link donde puedes bajar traducciones del programa, de las ayudas y demás (por si, al igual que yo, el inglés te abruma), donde te explica cómo crear una escena paso a paso.
Hasta que no me leí esto un par de veces, no fui capaz de avanzar nada, asi que te recomiendo que hagas eso mismo y, una vez hecho algo de prueba con la guia del tutorial hagas preguntas mas concretas y te puedan (y si yo puedo tambien) ayudar.
Aunque sea feo el escenario y los objetos no importa para empezar. Es mas, te lo recomiendo para ahorrarte tiempo, y que utilices el actor predefinido por ahora. Ya tendrás tiempo de crear obras maestras cuando domines el programa.

http://wme.adventureboxstudios.com/descargas/

Mucha suerte y ánimo.
« Last Edit: January 29, 2011, 06:23:01 PM by bamyito »
Logged
Pages: 1 [2]  All
 

Page created in 0.22 seconds with 22 queries.