Rpg˛S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies

Vai al contenuto

Rpg˛S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies

Screen Contest #90

Kamikun






  • Si prega di effettuare il log in prima di rispondere
scelta personaggi

    terenzio2
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 48 messaggi

#1 Inviato 03 November 2018 - 12:58 PM

ciao a tutti

Mi piacerebbe creare uno script che mi permetta di cambiare personaggio da una parte all'altra. per lo script dello scambio di parti, ci sono, ma per questa parte "grafica" ho problemi e mi piacerebbe risolverlo. Mi piacerebbe assicurarmi che selezionando un personaggio il giocatore possa spostarlo da una sezione all'altra. Mi potete aiutare?

per farvi capire meglio ecco cosa ho fatto

View My Video

class Scene_ConfermaScelte < Scene_MenuBase
def start

super

@commands = Window_ConfermaScelte.new(10, 300)

@commands.set_handler(:line0, method(:do_line0))

@commands.set_handler(:line1, method(:do_line1))

@commands.set_handler(:line2, method(:close_window))

end





def do_line0

@commands.close

SceneManager.return

SceneManager.return

SceneManager.return

end



def do_line1

@commands.close

SceneManager.return

SceneManager.return

end



def close_window

@commands.close

SceneManager.return

SceneManager.return

SceneManager.return

end

end







class Window_ConfermaScelte < Window_Command

def window_width; Graphics.width - 20; end



def window_height; fitting_height(3); end



def make_command_list

add_command("OK", :line0)

add_command("Annulla", :line1)

add_command("Rinuncia", :line2)

end

end















class Scene_Cambio < Scene_MenuBase



def start

super

@cambio_window = Window_Cambio.new(@actor)

end

end













class Window_Cambio < Window_Selectable



def initialize(actor)

super(0, 0, Graphics.width, Graphics.height)

@actor = actor

refresh

update

activate

@scelte = 1

scelta1 (line_height * 2)

end





def actor=(actor)

return if @actor == actor

@actor = actor

end





def refresh

contents.clear

draw_block1 (line_height * 0)

draw_horz_line(line_height * 1)

draw_block2 (line_height * 2)

draw_horz_line(line_height * 6)

draw_block3 (line_height * 7)

draw_horz_line(line_height * 11)

draw_block4 (line_height * 12)

ritorna_normale

end





def update

movimenti



end



def scelta1(y)

refresh

@actor = $game_party.menu_actor_next

@actor = $game_party.menu_actor_next

@actor = $game_party.menu_actor_next

draw_actor_face(@actor, 8, y)

@actor = $game_party.menu_actor_prev

@actor = $game_party.menu_actor_prev

@actor = $game_party.menu_actor_prev

end



def scelta2(y)

refresh

@actor = $game_party.menu_actor_next

@actor = $game_party.menu_actor_next

@actor = $game_party.menu_actor_next

draw_actor_face(@actor, 180, y)

@actor = $game_party.menu_actor_prev

@actor = $game_party.menu_actor_prev

@actor = $game_party.menu_actor_prev

end











def movimenti

case @scelte

when 1

scelta1 (line_height * 2)

if Input.repeat?(:DOWN)

@scelte = 3

end

if Input.repeat?(:RIGHT)

scelta2 (line_height * 2)

@scelte = 2

end

when 2

scelta2 (line_height * 2)

if Input.repeat?(:LEFT)

@scelte = 1

end

if Input.repeat?(:DOWN)

@scelte = 4

end

when 3

scelta1 (line_height * 7)

if Input.repeat?(:UP)

@scelte = 1

end

if Input.repeat?(:RIGHT)

@scelte = 4

end

when 4

scelta2 (line_height * 7)

if Input.repeat?(:LEFT)

@scelte = 3

end

if Input.repeat?(:UP)

@scelte = 2

end

end

end



def draw_horz_line(y)

line_y = y + line_height / 2 - 1

contents.fill_rect(0, line_y, contents_width, 2, line_color)

end



def line_color

color = normal_color

color.alpha = 48

color

end





def draw_block1(y)

draw_text(x, y + line_height * 0, 180, line_height, "Choose")

end







def draw_block2(y)

draw_actor_face(@actor, 8, y)

end



def draw_block3(y)

@actor = $game_party.menu_actor_next

draw_actor_face(@actor, 8, y)

@actor = $game_party.menu_actor_next

draw_actor_face(@actor, 180, y)

end





def ritorna_normale

@actor = $game_party.menu_actor_prev

@actor = $game_party.menu_actor_prev

end



def draw_block4(y)

draw_description(x, y)

end



def draw_description(x, y)

draw_text_ex(x, y, "Change character positions with the \ndirectional arrows and select them with ENTER. \nPress Esc to confirm or cancel ")

end

end


    terenzio2
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 48 messaggi

#2 Inviato 04 November 2018 - 18:07 PM

Up

    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#3 Inviato 06 November 2018 - 19:58 PM

potresti per cortesia mettere lo script su Pastebin? Il forum s'è fregato tutta l'indentazione.


"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    terenzio2
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 48 messaggi

#4 Inviato 06 November 2018 - 23:26 PM

https://pastebin.com/fM6Ybwy9

 

percaso sai cosa devo fare per far funzionare lo script come voglio?



    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#5 Inviato 07 November 2018 - 00:06 AM

Ti ho chiesto di metterlo su pastebin perché il forum aveva rotto tutta l'indentazione, se lo prendi e lo incolli da qui non cambia assolutamente nulla
La prima regola della programmazione è scrivere codice in modo corretto, comprensibile e soprattutto indentato.
Questo ad esempio è il modo corretto di condividere uno script:
class Scene_ConfermaScelte < Scene_MenuBase
  def start
    super
    @commands = Window_ConfermaScelte.new(10, 300)
    @commands.set_handler(:line0, method(:do_line0))
    @commands.set_handler(:line1, method(:do_line1))
    @commands.set_handler(:line2, method(:close_window))
  end

  def do_line0
    @commands.close
    SceneManager.return
    SceneManager.return
    SceneManager.return
  end

  def do_line1
    @commands.close
    SceneManager.return
    SceneManager.return
  end

  def close_window
    @commands.close
    SceneManager.return
    SceneManager.return
    SceneManager.return
  end
end

class Window_ConfermaScelte < Window_Command

  def window_width;
    Graphics.width - 20;
  end

  def window_height;
    fitting_height(3);
  end

  def make_command_list
    add_command("OK", :line0)
    add_command("Annulla", :line1)
    add_command("Rinuncia", :line2)
  end
end

class Scene_Cambio < Scene_MenuBase
  def start
    super
    @cambio_window = Window_Cambio.new(@actor)
  end
end

class Window_Cambio < Window_Selectable
  def initialize(actor)
    super(0, 0, Graphics.width, Graphics.height)
    @actor = actor
    refresh
    update
    activate
    @scelte = 1
    scelta1 (line_height * 2)
  end

  def actor=(actor)
    return if @actor == actor
    @actor = actor
  end

  def refresh
    contents.clear
    draw_block1 (line_height * 0)
    draw_horz_line(line_height * 1)
    draw_block2 (line_height * 2)
    draw_horz_line(line_height * 6)
    draw_block3 (line_height * 7)
    draw_horz_line(line_height * 11)
    draw_block4 (line_height * 12)
    ritorna_normale
  end

  def update
    movimenti
  end

  def scelta1(y)
    refresh
    @actor = $game_party.menu_actor_next
    @actor = $game_party.menu_actor_next
    @actor = $game_party.menu_actor_next
    draw_actor_face(@actor, 8, y)
    @actor = $game_party.menu_actor_prev
    @actor = $game_party.menu_actor_prev
    @actor = $game_party.menu_actor_prev
  end

  def scelta2(y)
    refresh
    @actor = $game_party.menu_actor_next
    @actor = $game_party.menu_actor_next
    @actor = $game_party.menu_actor_next
    draw_actor_face(@actor, 180, y)
    @actor = $game_party.menu_actor_prev
    @actor = $game_party.menu_actor_prev
    @actor = $game_party.menu_actor_prev
  end

  def movimenti
    case @scelte
    when 1
      scelta1 (line_height * 2)
      if Input.repeat?(:DOWN)
        @scelte = 3
      end
      if Input.repeat?(:RIGHT)
        scelta2 (line_height * 2)
        @scelte = 2
      end
    when 2
      scelta2 (line_height * 2)
      if Input.repeat?(:LEFT)
        @scelte = 1
      end
      if Input.repeat?(:DOWN)
        @scelte = 4
      end
    when 3
      scelta1 (line_height * 7)
      if Input.repeat?(:UP)
        @scelte = 1
      end
      if Input.repeat?(:RIGHT)
        @scelte = 4
      end
    when 4
      scelta2 (line_height * 7)
      if Input.repeat?(:LEFT)
        @scelte = 3
      end
      if Input.repeat?(:UP)
        @scelte = 2
      end
    end
  end

  def draw_horz_line(y)
    line_y = y + line_height / 2 - 1
    contents.fill_rect(0, line_y, contents_width, 2, line_color)
  end

  def line_color
    color = normal_color
    color.alpha = 48
    color
  end

  def draw_block1(y)
    draw_text(x, y + line_height * 0, 180, line_height, "Choose")
  end

  def draw_block2(y)
    draw_actor_face(@actor, 8, y)
  end

  def draw_block3(y)
    @actor = $game_party.menu_actor_next
    draw_actor_face(@actor, 8, y)
    @actor = $game_party.menu_actor_next
    draw_actor_face(@actor, 180, y)
  end

  def ritorna_normale
    @actor = $game_party.menu_actor_prev
    @actor = $game_party.menu_actor_prev
  end

  def draw_block4(y)
    draw_description(x, y)
  end

  def draw_description(x, y)
    draw_text_ex(x, y, "Change character positions with the \ndirectional arrows and select them with ENTER. \nPress Esc to confirm or cancel ")
  end
end
Si fa meno fatica a capirlo e non esci pazzo.
Questo script viola tantissimi concetti di buona programmazione e soprattutto fa cose inutili e ridondanti.
  • il codice si deve capire: line0 line1 e line2 non sono dei buoni simboli. Meglio utilizzare command_ok, command_cancel e command_back
  • Quanti SceneManager.return metti? Non ho mai visto una cosa del genere. Usa SceneManager.goto per andare direttamente ad una schermata.
  • Non si fa una schermata diversa per ogni finestra. Se usi un popup, nella stessa scena metti più finestre e quella della conferma sarà nascosta di default (o chiusa)
  • inutile mettere update all'inizializzazione della finestra. Il metodo update viene chiamato già ad ogni frame per aggiornare eventuali input.
  • I metodi movimenti, scelta1 e scelta2 di Window_Cambio sono al di fuori di ogni mia comprensione. Mi sanguinavano solo gli occhi per cercare di capire quale aborto dovessero tirar fuori queste procedure.
Perché non hai usato una finestra di selezione come scelta del personaggio?
Ma soprattutto, perché non usare la funzione di cambio personaggio già presente in VX Ace?

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    terenzio2
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 48 messaggi

#6 Inviato 07 November 2018 - 10:53 AM

l obiettivo di questo script è dare la possibilità al giocatore di creare due diversi party in modo più originale

per questo l 'unico problema che ho è come posso selezionarne uno di loro e poi scambiarlo da un party all altro

 

e dov'è la  funzione di cambio personaggio già presente in VX Ace? è come la voglio fare io o semplicemente aggiunge e toglie i personaggi?



    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#7 Inviato 07 November 2018 - 19:41 PM

l obiettivo di questo script è dare la possibilità al giocatore di creare due diversi party in modo più originale
per questo l 'unico problema che ho è come posso selezionarne uno di loro e poi scambiarlo da un party all altro
 
e dov'è la  funzione di cambio personaggio già presente in VX Ace? è come la voglio fare io o semplicemente aggiunge e toglie i personaggi?

oh scambiare personaggi in 2 party diversi è un'altra cosa.
Prima di tutto penso ti convenga creare due finestre di selezione (party1 e party 2) con all'interno due liste separate di eroi. Con il tasto invio sposti un eroe da un party all'altro e con un altro tasto sposti il cursore da una finestra all'altra.
Non è difficile.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    terenzio2
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 48 messaggi

#8 Inviato 07 November 2018 - 20:55 PM

Potresti farmi questo script che ho problemi a farlo?

    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#9 Inviato 08 November 2018 - 20:54 PM

Potresti farmi questo script che ho problemi a farlo?

Al momento causa tesi di laurea ho sospeso tutti i lavori :D
Se ne parlerà una volta laureato, se sarai ancora interessato.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    terenzio2
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 48 messaggi

#10 Inviato 10 November 2018 - 18:23 PM

Certo. E quanto ci vorrà?




  • Feed RSS