PureBasic:Editeur map 2D - Fenêtre et événements



PureBasic:Editeur map 2D - Fenêtre et événements

<< Précédent | Sommaire | Suivant >>


Sommaire

[modifier] Introduction

J'initialise ce tutoriel sans l'avoir préparé (c'est sans aucun doute une très mauvaise idée), j'ignore encore quelle direction il va prendre et si je le terminerai, n'hésitez pas à l'orienter si besoin , ou à donner un coup de pouce pour que ce tutoriel aboutisse à un éditeur de map 2D complet.

L'idée serait de réaliser un éditeur pour la création des maps du RPG 2D (mettre un lien vers le tutoriel du RPG2D en C et en PureBasic).

Cet éditeur devrait permettre :

  • de définir la dimension d'une map.
  • Charger / Sauver une map (les 3 fichiers .map, .sprite, .event)
  • Charger un chipset pour la construction de la map (couche map)
  • Charger un chipset pour les sprites (couche sprite)
  • Charger une musique et l'écouter avant de l'associer à la map
  • Charger un son et l'écouter avant de l'associer à un événement
  • Définir les événements directement sur la map.
  • créer les fichiers .map .event et .sprite automatiquement.


A travers cet éditeur, l'objectif est aussi de montrer comment utiliser les gadgets et autres fonctions windows pour créer une application.

Je ne suis pas un expert des applications windows, je dirais même que j'ai tout à apprendre dans ce domaine, aussi n'hésitez pas à me corriger ou à proposer une meilleure solution quand vous le jugerez nécessaire.


Aperçu de l'éditeur (Cliquez sur l'image pour agrandir)
Aperçu de l'éditeur (Cliquez sur l'image pour agrandir)

[modifier] Fenêtre et événements

Entrons directement dans le vif du sujet

EnableExplicit

;Liste des fenêtres 
Enumeration 
  #FenetrePrincipale
EndEnumeration

Define.l Event

If OpenWindow(#FenetrePrincipale, 0, 0, 800, 600, "Editeur de map 2D", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) = 0
  MessageRequester("Erreur", "Impossible d'ouvrir la fenêtre ", #PB_MessageRequester_Ok) 
  End
EndIf
  
Repeat
  Event = WaitWindowEvent()
  
  Select Event  
   
  EndSelect

Until Event = #PB_Event_CloseWindow

Ajouter un texte d'explication sur la fenêtre , et les évènements.


[modifier] Menu

EnableExplicit

;Liste des fenêtres 
Enumeration 
  #FenetrePrincipale
EndEnumeration

; Menu

Enumeration 
  #MenuPrincipal
  #MenuNouveau
  #MenuOuvrir
  #MenuEnregistrer
  #MenuQuitter
  #MenuRecent1
  #MenuRecent2
  #MenuEventTeleport
  #MenuEventDialog
  #MenuEventBattle
  #MenuEventShop
  #MenuEventInn
  #MenuEventChangeTile
  #MenuApropos
  #MenuPopup
  #PopupEventTeleport
  #PopupEventDialog
  #PopupEventBattle
  #PopupEventShop
  #PopupEventInn
  #PopupEventChangeTile
EndEnumeration

Define.l Event, quit

If OpenWindow(#FenetrePrincipale, 0, 0, 800, 600, "Editeur de map 2D", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) = 0
  MessageRequester("Erreur", "Impossible d'ouvrir la fenêtre ", #PB_MessageRequester_Ok) 
  End
EndIf

If CreateMenu(#MenuPrincipal, WindowID(#FenetrePrincipale))
  MenuTitle("Fichier")
    MenuItem(#MenuNouveau    , "Nouveau")
    MenuItem(#MenuOuvrir     , "Ouvrir une map")
    MenuItem(#MenuEnregistrer, "Enregistrer une map")
    MenuBar()
    OpenSubMenu("Fichiers récents")
      MenuItem(#MenuRecent1  , "C:\map1.map")
      MenuItem(#MenuRecent2  , "C:\map2.map")
    CloseSubMenu()
    MenuBar()
    MenuItem(#MenuQuitter    , "Quitter")

  MenuTitle("Evénements")
    MenuItem(#MenuEventBattle    , "Evénement bataille")
    MenuItem(#MenuEventChangeTile, "Evénement change tuile")
    MenuItem(#MenuEventDialog    , "Evénement dialogue")
    MenuItem(#MenuEventInn       , "Evénement auberge")
    MenuItem(#MenuEventShop      , "Evénement magasin")
    MenuItem(#MenuEventTeleport  , "Evénement téléportation")
    
  MenuTitle("?")
    MenuItem(#MenuApropos, "A propos de ...")

EndIf

If CreatePopupMenu(#MenuPopup)
  MenuTitle("Evénements")       
    MenuItem(#PopupEventBattle    , "Evénement bataille")
    MenuItem(#PopupEventChangeTile, "Evénement change tuile")
    MenuItem(#PopupEventDialog    , "Evénement dialogue")
    MenuItem(#PopupEventInn       , "Evénement auberge")
    MenuItem(#PopupEventShop      , "Evénement magasin")
    MenuItem(#PopupEventTeleport  , "Evénement téléportation")
EndIf
  
Repeat
  Event = WaitWindowEvent()
  
  Select Event  
    
    Case #WM_RBUTTONDOWN ; Le bouton droit de la souris a été cliqué =>
      DisplayPopupMenu(#MenuPopup, WindowID(#FenetrePrincipale))  ; On affiche le menu contextuel

    Case #PB_Event_Menu
      
      Select EventMenu()
      
        Case #MenuQuitter : quit = #True
      
        Case #MenuApropos : MessageRequester("A propos de", "Editeur de map 2D, à suivre...", 0)
        
      EndSelect
            
  EndSelect

Until Event = #PB_Event_CloseWindow Or quit

Expliquer le menu et le popupmenu ici.


[modifier] Gadgets

A suivre