Inscrit le: 12 Aoû 2006, 00:00 Messages: 235 Points d'aide: 37/60
Créations :
Voir ses créations
|
J'ai plaisir à voir que de nouveaux concepteurs s'attèlent aux non-rpg..! Je ne fais plus de jeux depuis un moment, mais j'ai travaillé sur le shoot them up et le worms-like pendant trois ans je crois - ce qui était extrêmement ambitieux - devant la montagne de travail, j'ai fini par abandonner ces projets... Cependant, l’expérience m'a enseigné pas mal de choses. Il y a de la matière pour travailler donc je vais te lancer plein de remarques, conseils, ce qui n'implique pas que ce que tu as fais jusque là est à jeter, mais que tu peux encore aller plus loin : - Sur un jeu qui se joue vite, il faut absolument éviter les introductions à rallonge (si classe soient elles. La tienne est vraiment très réussi, mais elle n'apporte pas grand chose au plaisir de jeu immédiat). De même les "appuyez sur entrée" qui sont une idée de ce à quoi doit ressembler un jeu, mais qui font perdre du temps au joueur (je part du principe que ton jeu est fait pour un individu lambda qui ne connait pas nécessairement le monde du making.) - Le gameplay doit être évident ou être expliqué de façon clair et concise. - L'espace de jeu doit être le moins chargé possible pour invité à la concentration. - La jouabilité doit être la plus agréable possible, c'est là dessus qu'il faut passer le plus de temps, c'est ça le fun du jeu, beaucoup plus que les graphisme, l'histoire ou la musique (qui permettent de mettre le joueur en immersion certes, mais est-ce vraiment primordiale dans un jeu de ce genre ? - Il faut absolument pouvoir faire pause pendant le jeu avec Echap, ou, si c'est un autre bouton, qu'on l'apprenne d'une façon ou d'une autre (écrit en haut à gauche par exemple, ou pendant un didacticiel) - Si des effets de fous ne sont pas nécessaire pendant les menus et l'introduction, en jeu il faut que ça foisonne, que ça explose, que ça fasse du bruit, c'est là que ça devient fun, qu'on s'amuse, quand on fait un combo énorme et que l'écran explose. - C'est dommage d'avoir fait en sorte qu'on puisse jouer sans rpg maker et qu'il faille installer une fonte... Solution ? Dans ton main ligne 10 : $defaultfonttype = "Bastion", "Arial" Le champ suivant la virgule, c'est la fonte de secours, tu peux en mettre plusieurs si tu veux. - Pour gérer à la souris c'est faisable, mais c'est à toi de le faire. - Code: Tout sélectionner
#=================================== # Mouse #--------------------------------------------------------------- # Module d'utilisation de la souris #=================================== Scr2cli = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i') Readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l') Findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l') module Mouse # Position du curseur @cursor_pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i') # Méthode du modules module_function #------------------------------------------------------------- # Méthode d'initialisation #------------------------------------------------------------- def start $cursor = RPG::Sprite.new $cursor.z = 1000 $cursor.visible = false update end #------------------------------------------------------------- # Méthode de position globale #------------------------------------------------------------- def mouse_global_pos pos = [0, 0].pack('ll') if @cursor_pos.call(pos) != 0 return pos.unpack('ll') else return nil end end #------------------------------------------------------------- # Méthode de mise à jour de la position du # curseur #------------------------------------------------------------- def update x, y = screen_to_client(*mouse_global_pos) if x >= 0 and y >= 0 and x < 800 and y < 600 $cursor.x = x $cursor.y = y else return nil end end #------------------------------------------------------------- # Méthode de définition du curseur comme # visible ou non #------------------------------------------------------------- def visible=(x) $cursor.visible = x end end #--------------------------------------------------------------- # Méthode de renvoie de la position du curseur # s'il a bougé #--------------------------------------------------------------- def screen_to_client(x, y) return nil unless x and y pos = [x, y].pack('ll') if Scr2cli.call(hwnd, pos) != 0 return pos.unpack('ll') else return nil end end #--------------------------------------------------------------- # Méthode servant à savoir quelle fenêtre est # celle du jeu, afin de modifier les coordonées. #--------------------------------------------------------------- def hwnd game_name = "\0" * 256 Readini.call('Game','Title','',game_name,255,".\\Game.ini") game_name.delete!("\0") return Findwindow.call('RGSS Player',game_name) end
#=================================== # Clavier #--------------------------------------------------------------- # Gestion avancée du clavier (script et event) #=================================== Press = Win32API.new("user32","GetKeyState",['i'],'i') #--------------------------------------------------------------- # Si la touche est cliquée #--------------------------------------------------------------- def trigger(n) R[n][1] end #--------------------------------------------------------------- # Si la touche est pressée #--------------------------------------------------------------- def press(n) (Press.call(TAB_KEY[n]) != 0 and Press.call(TAB_KEY[n]) != 1) end #--------------------------------------------------------------- # Si la touche est pressée - Seconde version #--------------------------------------------------------------- def repeat(n) if Graphics.frame_count % 4 == 3 return press(n) else return false end end #--------------------------------------------------------------- # Mise à jour du système #--------------------------------------------------------------- class Keys def Keys.update() TAB_KEY.keys.each do |n| m = R[n][0] pr = (Press.call(TAB_KEY[n]) != 0 and Press.call(TAB_KEY[n]) != 1) tr = (pr&&!m) R[n] = [pr, tr, m] end end end #-------------------------------------------------------------- # Inclusion de le module Input #-------------------------------------------------------------- module Input module_function class << self alias update_02112011 update end def update Keys.update() update_02112011() end end # Tableau avancé des touches TAB_KEY = { "click gauche" => 1, "sg" => 1, "click droit" => 2, "sd" => 2, "click milieu" => 4, "sm" => 4, "del" => 8, "tab" => 9, "enter" => 13, "shift" => 16, "pause" => 19, "maj lock" => 20, "esc" => 27, "space" => 32, "pg up" => 33, "pg down" => 34, "end" => 35, "home" => 36, "left" => 37, "up" => 38, "right" => 39, "down" => 40, "select" => 41, "print" => 42, "impr" => 43, "insert" => 44, "suppr" => 46, "a" => 65, "b" => 66, "c" => 67, "d" => 68, "e" => 69, "f" => 70, "g" => 71, "h" => 72, "i" => 73, "j" => 74, "k" => 75, "l" => 76, "m" => 77, "n" => 78, "o" => 79, "p" => 80, "q" => 81, "r" => 82, "s" => 83, "t" => 84, "u" => 85, "v" => 86, "w" => 87, "x" => 88, "y" => 89, "z" => 90, "0" => 96, "1" => 97, "2" => 98, "3" => 99, "4" => 100, "5" => 101, "6" => 102, "7" => 103, "8" => 104, "9" => 105, "*" => 106, "+" => 107, "num" => 108, "-" => 109, "." => 110, "/" => 111, "F1" => 112, "F2" => 113, "F3" => 114, "F4" => 115, "F5" => 116, "F6" => 117, "F7" => 118, "F8" => 119, "F9" => 120, "F10" => 121, "F11" => 122, "F12" => 123, "lmaj" => 160, "rmaj" => 161, "ctrl" => 162, "lctrl" => 162, "rctrl" => 163, "lalt" => 164, "ralt" => 165, "," => 188 } # Tableau relatif pour les booléens R = TAB_KEY.clone R.keys.each do |k| R[k] = [false, false, false] end
Mes scripts de gestion de la souris et du clavier, si tu ne t'y connais pas assez en ruby pour les utiliser, bosse jusqu'à t'y connaître assez =D - Pourquoi lorsque l'on descend dans le menu de sélection le panorama change de sens ? (Attention il n'est pas complet, d'ailleurs, pour qu'un panorama soit réussi, il faut qu'il soit infini) - Le choix qu'on a juste avant le menu, je ne l'ai pas compris (je n'ai pas compris pourquoi on avait à choisir ça ni, lorsqu'il est apparu, que c'était un choix). - Accélérer la musique pendant le jeu c'est possible mais pas encore de ton niveau a priori (il s'agit d'utiliser un système extérieur pour gérer le son, ça se fait mais c'est beaucoup de travail pour pas grand chose). Simplifie les choses, tu changes de musique progressivement - en BGS tout en réduisant le BGM - avec une musique un peu plus énervée. Voilà, c'est un peu décousu, mais c'est à peu près tout ce que j'ai à en dire. J'imagine que tu n'as pas une grande maîtrise du ruby (tu as fais ton introduction en events), et que ce que les conseils que je t'ai donnés ne seront pas faciles à appliquer. Pour autant, il me semble important de rappeler que le principal dans un jeu de ce style c'est de s'amuser vite et de s'amuser beaucoup ! Bonne journée, et bon courage surtout.
_________________
1 PA donné(s) par Samarium le 15 Novembre 2011
|
|