Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| KGF_dll - nouvelles versions | |
|
+8JL35 Marc papydall Jicehel Yannick pascal10000 Minibug Klaus 12 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 30 Avr 2016 - 21:33 | |
| De rien, Minibug. Sincèrement, ça me fait plaisir de produire des choses de ce genre.
As-tu essayé les différents alignements, dans mon programme de démo ? 1. mets le combo de sélection à "Sélection d'objets" (au lieu de "Un objet seul" par défaut) 2. sélectionne le mémo en haut à gauche 3. puis, garde touche control enfoncé en sélectionnant le bouton juste à côté ainsi que le libellé au-dessus du bouton 4. lâche control, puis "tire" le groupe vers un espace libre vers le bas à droite de la fenêtre 5. clique sur "Stop" ce qui désélectionne tout 6. déplace maintenant ces 3 objets de sorte à les séparer un peu, aussi bien verticalement que horizontalement (c'est juste pour la facilité de vision du résultat final) 7. resélectionne ces 3 objets, en commençant par celui que tu veux 8. puis choisis un des modes d'alignement, clique sur le bouton "Aligner" et admire... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Sam 30 Avr 2016 - 21:46 | |
| Non je n'ai pas encore testé. je viens de corriger mon erreur. Il s'agissait juste de faire un CLEAR sur le MEMO en fin de traitement. Je vais maintenant me focaliser sur le déplacement 'magnetique' ensuite je regarde le fichier que Jack viens de déposer. J'étudierai tes fonctions après ou sinon demain. mais ne t'inquiètes pas je vais regarder.. Je ne t'ai pas demandé tout cela pour rien. rassures toi. Seulement aujourd'hui je n'ai pas eu autant de temps que prévu ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 30 Avr 2016 - 21:55 | |
| - Citation :
- Il s'agissait juste de faire un CLEAR sur le MEMO en fin de traitement.
Ca dépend comment tu traites l'information. Le MEMO en question doit avoir un évènement ON_CHANGE. Dans la routine associée, tu fais une boucle comme ceci: - Code:
-
change: for i%=1 to count(102) s$ = trim$(item_read$(102,i%)) if s$="" then return p% = instr(s$,",") obj% = val(left$(s$,p%-1)) s$ = mid$(s$,p%+1,100) p% = instr(s$,",") left obj%,val(left$(s$,p%-1)) s$ = mid$(s$,p%+1,100) p% = instr(s$,",") top obj%,val(left$(s$,p%-1)) s$ = mid$(s$,p%+1,100) p% = instr(s$,",") width obj%,val(left$(s$,p%-1)) s$ = mid$(s$,p%+1,100) height obj%,val(s$) next i% return (extrait du programme de démo). Ainsi, on traite d'un seul coup l'ensemble des informations qui arrivent. Et l'évènement suivant envoyé par la DLL fait un CLEAR automatique ! Il n'y a pas de cumul de lignes. Bien sûr, le problème risque de se poser si tu examines le MEMO en fonction d'un timer. Mais je pense que ce ne serait pas la bonne technique. Il vaut mieux faire agir une routine ON_CHANGE. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| | | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 13:22 | |
| KGF.dll V6.50 du 02/05/2016Nouveautés: Scene2d: - déplacement possible de la fenêtre de visualisation sur une image de fond plus grande que le Scene2D - déplacement de cette fenêtre par la souris et par programme - autorisation/interdiction du déplacement de cette fenêtre par la souris - CreateScend2D: paramètre supplémentaire (autoriser fenêtre de visualisation ou non) - nouvelle fonction ScrollScene2DModules modifiés: KGF.dll Scend2D.docLa doc et les sources sources sont à jour. Vous en avez rêvé ? Je l'ai fait... Maintenant, si l'on a une image de fond très grande, on a le choix: - dézoomer l'image pour qu'elle tienne dans l'affichage du Scene2D (fonctionnement classique) - utiliser l'affichage du Scene2D comme un "ViewPort" et déplacer ce viewport dans l'image de fond Ce déplacement peut se faire en "tirant" le fond par la souris, ou par programme de façon relative ou absolue. Les sprites sont repositionnés automatiquement. Les informations sur le Scene2D et l'interface ont été agrandies pour fournir également ces éléments. Voici le programme de démo, adapté à cette nouveauté. Essayez de "tirer" le fond dans toutes les directions. Utilisez le bouton "Info Scene2D" et "Bloquer fond" pour constater l'effet... - Code:
-
' test_Scene2D_Klaus.bas
label arriere, avant, cacher, cachertout, montrertout label event, fixe, mobile, mobiletout, zoomplus, zoommoins label changerimg, imagelist, changerilb label deplacer, info1, info2, panit
dim res%, SC2D%, SC2D_PS%, IL%, w%, h%, f$, sInfo%, i% dim sversion$, iversion% : sversion$ = string$(255," ")
dim M1% : M1% = 0 - 1 dim bl$ : bl$ = string$(5," ") dim back$ : back$ = "SC2D_fond.jpg" dim sprite0$ : sprite0$ = "SC2D_sprite4.bmp" dim sprite1$ : sprite1$ = "SC2D_sprite8.bmp" dim sprite2$ : sprite2$ = "SC2D_sprite3.bmp" dim sprite3$ : sprite3$ = "crane.bmp"
width 0,1000 : height 0,700
dll_on "KGF.dll" iversion% = dll_call1("GetVersionOfScene2D",adr(sversion$)) caption 0,trim$(sversion$)
button 1 : top 1 ,10 : left 1,10 : caption 1,"En arrière" : on_click 1,arriere button 2 : top 2, 10 : left 2,100 : caption 2,"En avant" : on_click 2,avant button 3 : top 3, 10 : left 3,190 : caption 3,"Cacher" : on_click 3,cacher button 4 : top 4, 10 : left 4,280 : caption 4,"Cacher tout" : on_click 4,cachertout button 5 : top 5, 10 : left 5,370 : caption 5,"Montrer tout" : on_click 5,montrertout button 6 : top 6, 10 : left 6,460 : caption 6,"Fixe" : on_click 6,fixe button 7 : top 7, 10 : left 7,550 : caption 7,"Mobile" : on_click 7,mobile button 8 : top 8, 10 : left 8,640 : caption 8,"Mobile tout" : on_click 8,mobiletout
button 9 : top 9, 40 : left 9,640 : caption 9,"Déplacer" : on_click 9,deplacer button 10 : top 10, 70 : left 10,640 : caption 10,"Zoom +" : on_click 10,zoomplus button 11 : top 11,100 : left 11,640 : caption 11,"Zoom -" : on_click 11,zoommoins button 12 : top 12,130 : left 12,640 : caption 12,"Changer img" : on_click 12,changerimg button 13 : top 13,160 : left 13,640 : caption 13,"ImageList" : on_click 13,imagelist button 14 : top 14,190 : left 14,640 : caption 14,"Changer ilb" : on_click 14,changerilb button 15 : top 15,220 : left 15,640 : caption 15,"Info Scene2D" : on_click 15,info1 button 16 : top 16,250 : left 16,640 : caption 16,"Info Sprite" : on_click 16,info2 button 17 : top 17,280 : left 17,640 : caption 17,"Bloquer fond" : on_click 17,panit
memo 96 : top 96,10 : left 96,730 : width 96,220 : height 96,400 font_name 96,"Courier" : font_size 96,8 open_dialog 97 edit 98 : hide 98 : on_change 98,event alpha 99 : top 99,450 : left 99,10 : caption 99,"en attente"
SC2D% = dll_call2("CreateScene2D",handle(0),1) SC2D_PS% = dll_call2("SetInterfaceOfScene2D",SC2D%,0) dim SC2D_Panoramic%(SC2D_PS%) SC2D_Panoramic%(0) = SC2D_PS% SC2D_Panoramic%(1) = handle(98) SC2D_PS% = dll_call2("SetInterfaceOfScene2D",SC2D%,adr(SC2D_Panoramic%)) res% = dll_call6("ResizeScene2D",SC2D%,10,40,600,400,1) res% = dll_call2("LoadBackgroundToScene2D",SC2D%,adr(back$))
res% = dll_call6("CreateSpriteInScene2D",SC2D%,50,130,0,200,adr(sprite0$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,150,30,0,100,adr(sprite1$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,250,30,0, 0,adr(sprite2$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,350,30,0,200,adr(sprite3$))
res% = dll_call6("DefineSpriteContactInScene2D",SC2D%,1,70,70,70,70) res% = dll_call3("ChangeSpriteOptionsInScene2D",SC2D%,1,0)
' activer les 2 lignes suivantes pour tester la suppression d'un sprite ! ' message "Taper RETURN pour continuer..." ' res% = dll_call2("DeleteSpriteInScene2D",SC2D%,3)
' activer les 2 lignes suivantes pour tester la suppression du Scene2D ! ' message "Taper RETURN pour continuer..." ' res% = dll_call1("DeleteScene2D",SC2D%)
end
' ChangeSpriteAttributesInScene2D(id%,ind%,vis%,sel%,mov%,ord%) ' id% = identifiant du Scene2D ' ind% = indice du sprite (1,2,3) ' ou 0 pour sprite sélectionné ' ou -1 pour tous les sprites, uniquement pour la visibilité ' vis% = 0 pour invisible ou 1 pour visible ' sel% = 0 pour non sélectionnable et 1 pour sélectionnable ' mov% = 0 pour non déplaçable et 1 pour déplaçable ' ord% = 1 pour "en avant" ou -1 pour "en arrière" ou 0 pour "pas de changement '
event: if text$(98)="status" caption 99,"sprite "+str$(SC2D_Panoramic%(2))+" à "+str$(SC2D_Panoramic%(3))+","+str$(SC2D_Panoramic%(4))+" dimension "+str$(SC2D_Panoramic%(5))+","+str$(SC2D_Panoramic%(6))+" collision: "+str$(SC2D_Panoramic%(7))+" contact: "+str$(SC2D_Panoramic%(8)) end_if return
arriere: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,M1%) return avant: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,1) return cacher: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,0,1,1,0) return cachertout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,0,1,1,0) return
montrertout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,1,1,1,0) return
fixe: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,0,0) return mobile: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,0) return
mobiletout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,1,1,1,0) return
deplacer: res% = dll_call4("ChangeSpritePositionInScene2D",SC2D%,0,200,220) return zoomplus: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if w% = (SC2D_Panoramic%(5)*3)/2 h% = (SC2D_Panoramic%(6)*3)/2 res% = dll_call4("ChangeSpriteSizeInScene2D",SC2D%,0,w%,h%) return zoommoins: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if w% = (SC2D_Panoramic%(5)*2)/3 h% = (SC2D_Panoramic%(6)*2)/3 res% = dll_call4("ChangeSpriteSizeInScene2D",SC2D%,0,w%,h%) return changerimg: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if filter 97,"Fichier BMP|*.bmp" f$ = file_name$(97) if f$="_" then return res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,0,adr(f$)) return imagelist: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if filter 97,"Fichier ILB|*.ilb" f$ = file_name$(97) if f$="_" then return if IL%<>0 then res% = dll_call1("DeleteImageList",IL%) IL% = dll_call2("CreateImageList",16,16) : ' en vue de KGF.ilb - à changer selon les besoins ! res% = dll_call2("LoadImageList",IL%,adr(f$)) res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,1,IL%) return
changerilb: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if if message_input("ImageList","Indice de l'image à utiliser: ","0")<>1 then return res% = val(message_text$) if res%<0 then return res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,2,res%) return info1: clear 96 sInfo% = dll_call2("InformAboutScene2D",SC2D%,0) if variable("info%")=1 then free info% dim info%(sInfo%) info%(0) = sInfo% res% = dll_call2("InformAboutScene2D",SC2D%,adr(info%)) item_add 96,"Scene2D:" item_add 96,right$(bl$+str$(info%(0)),4) + " = nombre d'éléments" item_add 96,right$(bl$+str$(info%(1)),4) + " = nombre de sprites" item_add 96,right$(bl$+str$(info%(2)),4) + " = ID du sprite actif" item_add 96,right$(bl$+str$(info%(3)),4) + " = left du Scene2D" item_add 96,right$(bl$+str$(info%(4)),4) + " = top du Scene2D" item_add 96,right$(bl$+str$(info%(5)),4) + " = width du Scene2D" item_add 96,right$(bl$+str$(info%(6)),4) + " = height du Scene2D" item_add 96,right$(bl$+str$(info%(7)),4) + " = viewport utilisé" item_add 96,right$(bl$+str$(info%(8)),4) + " = déplacement fond" item_add 96,right$(bl$+str$(info%(9)),4) + " = left du viewport" item_add 96,right$(bl$+str$(info%(10)),4) + " = top du viewport" return info2: clear 96 sInfo% = dll_call3("InformAboutSpriteInScene2D",SC2D%,0,0) if variable("info%")=1 then free info% dim info%(sInfo%) info%(0) = sInfo% res% = dll_call3("InformAboutSpriteInScene2D",SC2D%,0,adr(info%)) item_add 96,"Scene2D:" item_add 96,right$(bl$+str$(info%( 0)),4) + " = nombre d'éléments" item_add 96,right$(bl$+str$(info%( 1)),4) + " = nombre de sprites" item_add 96,right$(bl$+str$(info%( 2)),4) + " = indice du sprite" item_add 96,right$(bl$+str$(info%( 3)),4) + " = left du sprite" item_add 96,right$(bl$+str$(info%( 4)),4) + " = top du sprite" item_add 96,right$(bl$+str$(info%( 5)),4) + " = width du sprite" item_add 96,right$(bl$+str$(info%( 6)),4) + " = height du sprite" item_add 96,right$(bl$+str$(info%( 7)),4) + " = résistance" item_add 96,right$(bl$+str$(info%( 8)),4) + " = ImageList" item_add 96,right$(bl$+str$(info%( 9)),4) + " = indice ImageList" item_add 96,right$(bl$+str$(info%(10)),4) + " = animation activée" item_add 96,right$(bl$+str$(info%(11)),4) + " = intervalle en ms" item_add 96,right$(bl$+str$(info%(12)),4) + " = sprite visible" return
panit: if SC2D_Panoramic%(9)=0 then return if SC2D_Panoramic%(10)=0 res% = dll_call4("ScrollScene2D",SC2D%,1,0,0) caption 17,"Bloquer fond" else res% = dll_call4("ScrollScene2D",SC2D%,0,0,0) caption 17,"Libérer fond" end_if return Avec ça, un peut faire une image de fond très large pour un jeu de type Mario, ou grande dans les 2 dimensions pour un jeu de guerre ou de civilisation, etc. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Lun 2 Mai 2016 - 14:09 | |
| Bon, ben, il est temps que je mette à jour. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 15:22 | |
| Bon je n'ai pas autant testé que c que j'aurais voulu ce weekend, entre autre à cause de l'attaque de virus qui m'a un peu occupé samedi ... Mais j'ai testé un peu déjà et je suis en cours (La machine est lancée) Quelques petites remarques. Ce serait bien de pouvoir passer des images depuis Panoramic sans passer par l'étape du bmp (copie d'une portion d'image vers un sprite ou une des images de la liste d'une animation) Le viewport, c'est super, mais pareil, si on a un niveau très grand, le chargement en "one time" de tout le niveau serait complexe, et il faudrait pouvoir mettre à jour le fond additionnel par un mécanisme quelconque comme 4 noms d'images une pour quand on atteind le bord droit et l'autre quand on atteind le bord gauche en cas de déplacement horizontal et une quand on atteind la limite basse et l'autre quand on atteind la limite haute. (Attention au cas ou un atteind un coin et ou du coup il doit charger 2 ou 3 images (Pour le coin inférieure droit, ça pour être celle de droite, celle en bas à droite, et celle du bas). Pas si simple à coder cette affaire... Je n'ai pas encore tout lu, mais peut-on dessiner ou écrire sur le scene2d ? (Pour le moment, j'ai arrété la lecture du fichier doc aux sprites) | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 16:39 | |
| minibug et klaus je n'ai aucun accès a vos nouveaux webdav | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 16:40 | |
| Bonjour Klaus, Je viens de tenter un test. ça ne marche pas.
L'image de fond est réduite, dans le coin en haut à gauche, ça c'est normal. Mais je n'arrive pas à la déplacer avec la souris. Le bouton affiche "Bloquer fond" ce qui veut dire que l'mage est libérée, donc je devrais pouvoir la déplacer. Je procède comme pour déplacer une fenêtre Windows (Clic gauche maintenu, et déplacement) Je suppose qu'en chargeant le code tel qu'au dessus, on peu directement tenter de déplacer l'image ?
Qu'est-ce que je ne fais pas bien ?
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 16:43 | |
| Pascal1000, le mot de passe est panoramic123, comme d'hab. Tu clic sur le bouton webdev dans la signature de Klaus, (il faut que tu soit connecté au forum).
A+ | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 18:03 | |
| Bonjour ! Attention je suis passé chez un nouvel hébergeur. C'est Klaus qui l'a trouvé. Regarde dans les info de bas de page. Le Webdav a changer : https://my.cloudme.com/minibug/PanoramicVérifie aussi le mots de passe | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 18:40 | |
| Super ! Il y a des réactions ! Je vais les reprendre dans l'ordre. @Jicehel: - Citation :
- Ce serait bien de pouvoir passer des images depuis Panoramic sans passer par l'étape du bmp
Très bonne idée. Je l'avais déjà fait pour les images des Sprites, mais je le ferai pour l'image de fond: passer 0 pour prendre l'image contenue dans le presse-papier. - Citation :
- si on a un niveau très grand, le chargement en "one time" de tout le niveau serait complexe,
Non, pas tant que ça. D'abord, la complexité est gérée intégralement par la DLL. C'est plutôt une question de taille mémoire. Mais même une très grande image, chargée en début du programme dans la phase de lancement, ou au début de chaque niveau, ne dure que quelques secondes au maximum. Parfaitement supportable en début de niveau - ce n'est pas différent dans des jeux commerciaux. - Citation :
- il faudrait pouvoir mettre à jour le fond additionnel par un mécanisme quelconque comme 4 noms d'images une pour quand on atteind le bord droit et l'autre quand on atteind le bord gauche en cas de déplacement horizontal et une quand on atteind la limite basse et l'autre quand on atteind la limite haute.
Selon moi, dans un même niveau, il n'y en a pas besoin. Cependant, tu peux toujours utiliser la fonction qui recharge le fond d'image pour le faire - mais attention au positionnement des sprites qu'il faut revoir. Ceci dit, la fonction de viewport est justement faite pour éviter d'avoir recours à de tels artifices. Mon conseil serait d'avoir une image complète pour chaque niveau. En général (sauf s'il s'agit d'une photo haute définition), cette image ne sera pas très grande en termes d'espace. Mais même ainsi, le chargement global n'est guère pénalisant, et en cours de partie, puisque l'image est entièrement en mémoire, le déplacement du viewport est immédiat. Et c'était le but de la manoeuvre. Ce serait dommage de gâcher cet avantage en réintroduisant artificiellement une sorte de "pagination"... - Citation :
- peut-on dessiner ou écrire sur le scene2d
Non. C'est comme pour le Scene2d de Panoramic. Par contre, tu peux créer un sprite dans lequel tu charges un picture via le presse-papier et dans lequel tu as écrit ce que tu veux. Avec la police et la couleur de ton choix. @Jean-Claude: - Citation :
- L'image de fond est réduite, dans le coin en haut à gauche, ça c'est normal.
Non, justement. Ce n'est pas normal. As-tu chargé l'image de fond de mon WebDav, dossier Jeux\test_Sprite ? Sinon, tu peux utiliser une image de ton choix, mais alors elle devra dépasser en dimensions la taille du Scene2D qui est actuellement de 600x400 pixels, dans mon programme de démo. - Citation :
- Je suppose qu'en chargeant le code tel qu'au dessus, on peu directement tenter de déplacer l'image ?
Si par "code" tu entends mon programme de démo de mon dernier post, la réponse est OUI. @tous Effectivement, le WebDav a changé. Mais ma signature (en bas de chacun de mes posts) conduit vers le nouveau WebDav. Le mot de passe est indiqué également dans ma signature et n'a pas changé par rapport au WebDav précédent: panoramic123. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 18:51 | |
| KGF.dll V6.51 du 02/05/2016Nouveautés: Scene2d: - LoadBackgroundToScene2D: un 0 comme 2ème paramètre prend le contenu du presse-papier comme image Modules modifiés: KGF.dll Scend2D.docLa doc et les sources sources sont à jour. Ceci fait suite à la remarque de Jicehel. On peut maintenant générer une image de fond en Panoramic dans un PICTURE, la copier dans le presse-papier par CLIPBOARD_COPY puis la charger directement dans le Scene2D comme image de fond par: - Code:
-
res% = dll_call2("LoadBackgroundToScene2D",SC2D%,0)
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 19:02 | |
| Les images n'ont pas changées, j'ai gardé l'existant. Voila ce que j'ai à l'ouverture de ta démo: A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 19:14 | |
| Voici l'image de départ de ma démo, après avoir cliqué le bouton "Info Scend2D" Je décale un peu l'image de fond, en la tirant vers le haut à gauche, puis un clic sur "Info Scene2D": Finalement, je déplace l'image de fond de sorte à placer le viewport dans le coin en bas à droite, et je clique à nouveau sur "Info Scene2D" (la partie Scened2D seule pour cause de limite de taille): et la partie info correspondante: Ca marche... EDIT Je remets le code de la démo: - Code:
-
' test_Scene2D_Klaus.bas
label arriere, avant, cacher, cachertout, montrertout label event, fixe, mobile, mobiletout, zoomplus, zoommoins label changerimg, imagelist, changerilb label deplacer, info1, info2, panit
dim res%, SC2D%, SC2D_PS%, IL%, w%, h%, f$, sInfo%, i% dim sversion$, iversion% : sversion$ = string$(255," ")
dim M1% : M1% = 0 - 1 dim bl$ : bl$ = string$(5," ") dim back$ : back$ = "SC2D_fond.jpg" dim sprite0$ : sprite0$ = "SC2D_sprite4.bmp" dim sprite1$ : sprite1$ = "SC2D_sprite8.bmp" dim sprite2$ : sprite2$ = "SC2D_sprite3.bmp" dim sprite3$ : sprite3$ = "crane.bmp"
width 0,1000 : height 0,700
dll_on "KGF.dll" iversion% = dll_call1("GetVersionOfScene2D",adr(sversion$)) caption 0,trim$(sversion$)
button 1 : top 1 ,10 : left 1,10 : caption 1,"En arrière" : on_click 1,arriere button 2 : top 2, 10 : left 2,100 : caption 2,"En avant" : on_click 2,avant button 3 : top 3, 10 : left 3,190 : caption 3,"Cacher" : on_click 3,cacher button 4 : top 4, 10 : left 4,280 : caption 4,"Cacher tout" : on_click 4,cachertout button 5 : top 5, 10 : left 5,370 : caption 5,"Montrer tout" : on_click 5,montrertout button 6 : top 6, 10 : left 6,460 : caption 6,"Fixe" : on_click 6,fixe button 7 : top 7, 10 : left 7,550 : caption 7,"Mobile" : on_click 7,mobile button 8 : top 8, 10 : left 8,640 : caption 8,"Mobile tout" : on_click 8,mobiletout
button 9 : top 9, 40 : left 9,640 : caption 9,"Déplacer" : on_click 9,deplacer button 10 : top 10, 70 : left 10,640 : caption 10,"Zoom +" : on_click 10,zoomplus button 11 : top 11,100 : left 11,640 : caption 11,"Zoom -" : on_click 11,zoommoins button 12 : top 12,130 : left 12,640 : caption 12,"Changer img" : on_click 12,changerimg button 13 : top 13,160 : left 13,640 : caption 13,"ImageList" : on_click 13,imagelist button 14 : top 14,190 : left 14,640 : caption 14,"Changer ilb" : on_click 14,changerilb button 15 : top 15,220 : left 15,640 : caption 15,"Info Scene2D" : on_click 15,info1 button 16 : top 16,250 : left 16,640 : caption 16,"Info Sprite" : on_click 16,info2 button 17 : top 17,280 : left 17,640 : caption 17,"Bloquer fond" : on_click 17,panit
memo 96 : top 96,10 : left 96,730 : width 96,220 : height 96,400 font_name 96,"Courier" : font_size 96,8 open_dialog 97 edit 98 : hide 98 : on_change 98,event alpha 99 : top 99,450 : left 99,10 : caption 99,"en attente"
SC2D% = dll_call2("CreateScene2D",handle(0),1) SC2D_PS% = dll_call2("SetInterfaceOfScene2D",SC2D%,0) dim SC2D_Panoramic%(SC2D_PS%) SC2D_Panoramic%(0) = SC2D_PS% SC2D_Panoramic%(1) = handle(98) SC2D_PS% = dll_call2("SetInterfaceOfScene2D",SC2D%,adr(SC2D_Panoramic%)) res% = dll_call6("ResizeScene2D",SC2D%,10,40,600,400,1) res% = dll_call2("LoadBackgroundToScene2D",SC2D%,adr(back$))
res% = dll_call6("CreateSpriteInScene2D",SC2D%,50,130,0,200,adr(sprite0$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,150,30,0,100,adr(sprite1$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,250,30,0, 0,adr(sprite2$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,350,30,0,200,adr(sprite3$))
res% = dll_call6("DefineSpriteContactInScene2D",SC2D%,1,70,70,70,70) res% = dll_call3("ChangeSpriteOptionsInScene2D",SC2D%,1,0)
' activer les 2 lignes suivantes pour tester la suppression d'un sprite ! ' message "Taper RETURN pour continuer..." ' res% = dll_call2("DeleteSpriteInScene2D",SC2D%,3)
' activer les 2 lignes suivantes pour tester la suppression du Scene2D ! ' message "Taper RETURN pour continuer..." ' res% = dll_call1("DeleteScene2D",SC2D%)
end
' ChangeSpriteAttributesInScene2D(id%,ind%,vis%,sel%,mov%,ord%) ' id% = identifiant du Scene2D ' ind% = indice du sprite (1,2,3) ' ou 0 pour sprite sélectionné ' ou -1 pour tous les sprites, uniquement pour la visibilité ' vis% = 0 pour invisible ou 1 pour visible ' sel% = 0 pour non sélectionnable et 1 pour sélectionnable ' mov% = 0 pour non déplaçable et 1 pour déplaçable ' ord% = 1 pour "en avant" ou -1 pour "en arrière" ou 0 pour "pas de changement '
event: if text$(98)="status" caption 99,"sprite "+str$(SC2D_Panoramic%(2))+" à "+str$(SC2D_Panoramic%(3))+","+str$(SC2D_Panoramic%(4))+" dimension "+str$(SC2D_Panoramic%(5))+","+str$(SC2D_Panoramic%(6))+" collision: "+str$(SC2D_Panoramic%(7))+" contact: "+str$(SC2D_Panoramic%(8)) end_if return
arriere: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,M1%) return avant: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,1) return cacher: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,0,1,1,0) return cachertout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,0,1,1,0) return
montrertout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,1,1,1,0) return
fixe: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,0,0) return mobile: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,0) return
mobiletout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,1,1,1,0) return
deplacer: res% = dll_call4("ChangeSpritePositionInScene2D",SC2D%,0,200,220) return zoomplus: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if w% = (SC2D_Panoramic%(5)*3)/2 h% = (SC2D_Panoramic%(6)*3)/2 res% = dll_call4("ChangeSpriteSizeInScene2D",SC2D%,0,w%,h%) return zoommoins: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if w% = (SC2D_Panoramic%(5)*2)/3 h% = (SC2D_Panoramic%(6)*2)/3 res% = dll_call4("ChangeSpriteSizeInScene2D",SC2D%,0,w%,h%) return changerimg: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if filter 97,"Fichier BMP|*.bmp" f$ = file_name$(97) if f$="_" then return res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,0,adr(f$)) return imagelist: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if filter 97,"Fichier ILB|*.ilb" f$ = file_name$(97) if f$="_" then return if IL%<>0 then res% = dll_call1("DeleteImageList",IL%) IL% = dll_call2("CreateImageList",16,16) : ' en vue de KGF.ilb - à changer selon les besoins ! res% = dll_call2("LoadImageList",IL%,adr(f$)) res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,1,IL%) return
changerilb: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if if message_input("ImageList","Indice de l'image à utiliser: ","0")<>1 then return res% = val(message_text$) if res%<0 then return res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,2,res%) return info1: clear 96 sInfo% = dll_call2("InformAboutScene2D",SC2D%,0) if variable("info%")=1 then free info% dim info%(sInfo%) info%(0) = sInfo% res% = dll_call2("InformAboutScene2D",SC2D%,adr(info%)) item_add 96,"Scene2D:" item_add 96,right$(bl$+str$(info%(0)),4) + " = nombre d'éléments" item_add 96,right$(bl$+str$(info%(1)),4) + " = nombre de sprites" item_add 96,right$(bl$+str$(info%(2)),4) + " = ID du sprite actif" item_add 96,right$(bl$+str$(info%(3)),4) + " = left du Scene2D" item_add 96,right$(bl$+str$(info%(4)),4) + " = top du Scene2D" item_add 96,right$(bl$+str$(info%(5)),4) + " = width du Scene2D" item_add 96,right$(bl$+str$(info%(6)),4) + " = height du Scene2D" item_add 96,right$(bl$+str$(info%(7)),4) + " = viewport utilisé" item_add 96,right$(bl$+str$(info%(8)),4) + " = déplacement fond" item_add 96,right$(bl$+str$(info%(9)),4) + " = left du viewport" item_add 96,right$(bl$+str$(info%(10)),4) + " = top du viewport" return info2: clear 96 sInfo% = dll_call3("InformAboutSpriteInScene2D",SC2D%,0,0) if variable("info%")=1 then free info% dim info%(sInfo%) info%(0) = sInfo% res% = dll_call3("InformAboutSpriteInScene2D",SC2D%,0,adr(info%)) item_add 96,"Scene2D:" item_add 96,right$(bl$+str$(info%( 0)),4) + " = nombre d'éléments" item_add 96,right$(bl$+str$(info%( 1)),4) + " = nombre de sprites" item_add 96,right$(bl$+str$(info%( 2)),4) + " = indice du sprite" item_add 96,right$(bl$+str$(info%( 3)),4) + " = left du sprite" item_add 96,right$(bl$+str$(info%( 4)),4) + " = top du sprite" item_add 96,right$(bl$+str$(info%( 5)),4) + " = width du sprite" item_add 96,right$(bl$+str$(info%( 6)),4) + " = height du sprite" item_add 96,right$(bl$+str$(info%( 7)),4) + " = résistance" item_add 96,right$(bl$+str$(info%( 8)),4) + " = ImageList" item_add 96,right$(bl$+str$(info%( 9)),4) + " = indice ImageList" item_add 96,right$(bl$+str$(info%(10)),4) + " = animation activée" item_add 96,right$(bl$+str$(info%(11)),4) + " = intervalle en ms" item_add 96,right$(bl$+str$(info%(12)),4) + " = sprite visible" return
panit: if SC2D_Panoramic%(9)=0 then return if SC2D_Panoramic%(10)=0 res% = dll_call4("ScrollScene2D",SC2D%,1,0,0) caption 17,"Bloquer fond" else res% = dll_call4("ScrollScene2D",SC2D%,0,0,0) caption 17,"Libérer fond" end_if return | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 20:05 | |
| Bon, j'ai trouvé le problème, C'est la taille de l'image, le fond sur CloudMe fait 160x160,. En fait je n'arrive pas à télécharger l'image, donc j'ai fait enregistré sous.... J'ai pris une image dans ma réserve, que j'ai dimensionnée 800x533 pour qu'elle soit plus grande que le scene2d. Et ça marche bien, je peux la déplacer et les sprites bougent aussi tout en restant à leur position dans l'image. C'est Nickel. Cela ouvre des possibilités de jeu sur un grand territoire. A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 20:09 | |
| Merci pour l'info. Je l'ai remise, en 900x600 pixels. Et j'ai vérifié qu'après téléchargement, elle garde sa bonne dimension. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 21:30 | |
| KGF.dll V6.52 du 02/05/2016
Nouveautés: - nouvelle fonction SetImageListForScene2D
Modules modifiés: KGF.dll Scend2D.doc
La doc et les sources sources sont à jour.
Ceci complète les possibilités d'images de fond pour un jeu multi-niveaux. On peut maintenant indiquer uhne ImageList pour l'objet Scene2d. Cette liste est supposée contenir toutes les images de fond, dans leur résolution d'origine. Un appel à cette fonction permet alors de changer l'image de fond, instantanément, pour passer d'un niveau à un autre.
Cette ImageList est un objet normal ImageList de KGF.dll. Elle peut être créée dans un autre programme et sauvegardée. Et le programme de jeu utilisant Scene2D peut alors charger son ImageList à partir de cette sauvegarde et ensuite lier cette liste au Scene2D. Dès lors, le changement de fond implique un seul appel à cette nouvelle fonction, et le changement sera fait instantanément.
Cette possibilité est opérationnelle, mais pas intégrée dans le programme de démo. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 23:13 | |
| KGF.dll V6.53 du 02/05/2016Nouveautés: - ChangeSpriteSizeInScene2D; changement de dimension sans perte de précisionModules modifiés: KGF.dll Scened2D.docLa doc et les sources sources sont à jour. On peut maintenant, pour un sprite, faire de multiples zooms en arrière et en avant, dans n'importe quel ordre, sans que cela provoque une perte d'information. Lorsque la résolution revient à la dimension initiale du sprite, l'affichage sera exactement identique à son aspect initial. Le fait de dézoomer, même fortement, puis rezoomer jusqu'à la taille initiale ne provoque plus de pertes d'information. Voici le programme de démo, pour mémoire. La seule modification est l'affichage supplémentaire de la version de KGF.dll dans le titre. - Code:
-
' test_Scene2D_Klaus.bas
label arriere, avant, cacher, cachertout, montrertout label event, fixe, mobile, mobiletout, zoomplus, zoommoins label changerimg, imagelist, changerilb label deplacer, info1, info2, panit
dim res%, SC2D%, SC2D_PS%, IL%, w%, h%, f$, sInfo%, i% dim sversion$, iversion% : sversion$ = string$(255," ") dim kversion$ : kversion$ = string$(25," ")
dim M1% : M1% = 0 - 1 dim bl$ : bl$ = string$(5," ") dim back$ : back$ = "SC2D_fond.jpg" dim sprite0$ : sprite0$ = "SC2D_sprite4.bmp" dim sprite1$ : sprite1$ = "SC2D_sprite8.bmp" dim sprite2$ : sprite2$ = "SC2D_sprite3.bmp" dim sprite3$ : sprite3$ = "crane.bmp"
width 0,1000 : height 0,700
dll_on "KGF.dll" iversion% = dll_call1("GetVersionOfScene2D",adr(sversion$)) res% = dll_call1("KGFdllVersion",adr(kversion$)) caption 0,trim$(sversion$)+" dans "+kversion$
button 1 : top 1 ,10 : left 1,10 : caption 1,"En arrière" : on_click 1,arriere button 2 : top 2, 10 : left 2,100 : caption 2,"En avant" : on_click 2,avant button 3 : top 3, 10 : left 3,190 : caption 3,"Cacher" : on_click 3,cacher button 4 : top 4, 10 : left 4,280 : caption 4,"Cacher tout" : on_click 4,cachertout button 5 : top 5, 10 : left 5,370 : caption 5,"Montrer tout" : on_click 5,montrertout button 6 : top 6, 10 : left 6,460 : caption 6,"Fixe" : on_click 6,fixe button 7 : top 7, 10 : left 7,550 : caption 7,"Mobile" : on_click 7,mobile button 8 : top 8, 10 : left 8,640 : caption 8,"Mobile tout" : on_click 8,mobiletout
button 9 : top 9, 40 : left 9,640 : caption 9,"Déplacer" : on_click 9,deplacer button 10 : top 10, 70 : left 10,640 : caption 10,"Zoom +" : on_click 10,zoomplus button 11 : top 11,100 : left 11,640 : caption 11,"Zoom -" : on_click 11,zoommoins button 12 : top 12,130 : left 12,640 : caption 12,"Changer img" : on_click 12,changerimg button 13 : top 13,160 : left 13,640 : caption 13,"ImageList" : on_click 13,imagelist button 14 : top 14,190 : left 14,640 : caption 14,"Changer ilb" : on_click 14,changerilb button 15 : top 15,220 : left 15,640 : caption 15,"Info Scene2D" : on_click 15,info1 button 16 : top 16,250 : left 16,640 : caption 16,"Info Sprite" : on_click 16,info2 button 17 : top 17,280 : left 17,640 : caption 17,"Bloquer fond" : on_click 17,panit
memo 96 : top 96,10 : left 96,730 : width 96,220 : height 96,400 font_name 96,"Courier" : font_size 96,8 open_dialog 97 edit 98 : hide 98 : on_change 98,event alpha 99 : top 99,450 : left 99,10 : caption 99,"en attente"
SC2D% = dll_call2("CreateScene2D",handle(0),1) SC2D_PS% = dll_call2("SetInterfaceOfScene2D",SC2D%,0) dim SC2D_Panoramic%(SC2D_PS%) SC2D_Panoramic%(0) = SC2D_PS% SC2D_Panoramic%(1) = handle(98) SC2D_PS% = dll_call2("SetInterfaceOfScene2D",SC2D%,adr(SC2D_Panoramic%)) res% = dll_call6("ResizeScene2D",SC2D%,10,40,600,400,1) res% = dll_call2("LoadBackgroundToScene2D",SC2D%,adr(back$))
res% = dll_call6("CreateSpriteInScene2D",SC2D%,50,130,0,200,adr(sprite0$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,150,30,0,100,adr(sprite1$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,250,30,0, 0,adr(sprite2$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,350,30,0,200,adr(sprite3$))
res% = dll_call6("DefineSpriteContactInScene2D",SC2D%,1,70,70,70,70) res% = dll_call3("ChangeSpriteOptionsInScene2D",SC2D%,1,0)
' activer les 2 lignes suivantes pour tester la suppression d'un sprite ! ' message "Taper RETURN pour continuer..." ' res% = dll_call2("DeleteSpriteInScene2D",SC2D%,3)
' activer les 2 lignes suivantes pour tester la suppression du Scene2D ! ' message "Taper RETURN pour continuer..." ' res% = dll_call1("DeleteScene2D",SC2D%)
end
' ChangeSpriteAttributesInScene2D(id%,ind%,vis%,sel%,mov%,ord%) ' id% = identifiant du Scene2D ' ind% = indice du sprite (1,2,3) ' ou 0 pour sprite sélectionné ' ou -1 pour tous les sprites, uniquement pour la visibilité ' vis% = 0 pour invisible ou 1 pour visible ' sel% = 0 pour non sélectionnable et 1 pour sélectionnable ' mov% = 0 pour non déplaçable et 1 pour déplaçable ' ord% = 1 pour "en avant" ou -1 pour "en arrière" ou 0 pour "pas de changement '
event: if text$(98)="status" caption 99,"sprite "+str$(SC2D_Panoramic%(2))+" à "+str$(SC2D_Panoramic%(3))+","+str$(SC2D_Panoramic%(4))+" dimension "+str$(SC2D_Panoramic%(5))+","+str$(SC2D_Panoramic%(6))+" collision: "+str$(SC2D_Panoramic%(7))+" contact: "+str$(SC2D_Panoramic%(8)) end_if return
arriere: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,M1%) return avant: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,1) return cacher: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,0,1,1,0) return cachertout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,0,1,1,0) return
montrertout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,1,1,1,0) return
fixe: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,0,0) return mobile: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,0) return
mobiletout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,1,1,1,0) return
deplacer: res% = dll_call4("ChangeSpritePositionInScene2D",SC2D%,0,200,220) return zoomplus: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if w% = (SC2D_Panoramic%(5)*3)/2 h% = (SC2D_Panoramic%(6)*3)/2 res% = dll_call4("ChangeSpriteSizeInScene2D",SC2D%,0,w%,h%) return zoommoins: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if w% = (SC2D_Panoramic%(5)*2)/3 h% = (SC2D_Panoramic%(6)*2)/3 res% = dll_call4("ChangeSpriteSizeInScene2D",SC2D%,0,w%,h%) return changerimg: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if filter 97,"Fichier BMP|*.bmp" f$ = file_name$(97) if f$="_" then return res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,0,adr(f$)) return imagelist: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if filter 97,"Fichier ILB|*.ilb" f$ = file_name$(97) if f$="_" then return if IL%<>0 then res% = dll_call1("DeleteImageList",IL%) IL% = dll_call2("CreateImageList",16,16) : ' en vue de KGF.ilb - à changer selon les besoins ! res% = dll_call2("LoadImageList",IL%,adr(f$)) res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,1,IL%) return
changerilb: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if if message_input("ImageList","Indice de l'image à utiliser: ","0")<>1 then return res% = val(message_text$) if res%<0 then return res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,2,res%) return info1: clear 96 sInfo% = dll_call2("InformAboutScene2D",SC2D%,0) if variable("info%")=1 then free info% dim info%(sInfo%) info%(0) = sInfo% res% = dll_call2("InformAboutScene2D",SC2D%,adr(info%)) item_add 96,"Scene2D:" item_add 96,right$(bl$+str$(info%(0)),4) + " = nombre d'éléments" item_add 96,right$(bl$+str$(info%(1)),4) + " = nombre de sprites" item_add 96,right$(bl$+str$(info%(2)),4) + " = ID du sprite actif" item_add 96,right$(bl$+str$(info%(3)),4) + " = left du Scene2D" item_add 96,right$(bl$+str$(info%(4)),4) + " = top du Scene2D" item_add 96,right$(bl$+str$(info%(5)),4) + " = width du Scene2D" item_add 96,right$(bl$+str$(info%(6)),4) + " = height du Scene2D" item_add 96,right$(bl$+str$(info%(7)),4) + " = viewport utilisé" item_add 96,right$(bl$+str$(info%(8)),4) + " = déplacement fond" item_add 96,right$(bl$+str$(info%(9)),4) + " = left du viewport" item_add 96,right$(bl$+str$(info%(10)),4) + " = top du viewport" return info2: clear 96 sInfo% = dll_call3("InformAboutSpriteInScene2D",SC2D%,0,0) if variable("info%")=1 then free info% dim info%(sInfo%) info%(0) = sInfo% res% = dll_call3("InformAboutSpriteInScene2D",SC2D%,0,adr(info%)) item_add 96,"Scene2D:" item_add 96,right$(bl$+str$(info%( 0)),4) + " = nombre d'éléments" item_add 96,right$(bl$+str$(info%( 1)),4) + " = nombre de sprites" item_add 96,right$(bl$+str$(info%( 2)),4) + " = indice du sprite" item_add 96,right$(bl$+str$(info%( 3)),4) + " = left du sprite" item_add 96,right$(bl$+str$(info%( 4)),4) + " = top du sprite" item_add 96,right$(bl$+str$(info%( 5)),4) + " = width du sprite" item_add 96,right$(bl$+str$(info%( 6)),4) + " = height du sprite" item_add 96,right$(bl$+str$(info%( 7)),4) + " = résistance" item_add 96,right$(bl$+str$(info%( 8)),4) + " = ImageList" item_add 96,right$(bl$+str$(info%( 9)),4) + " = indice ImageList" item_add 96,right$(bl$+str$(info%(10)),4) + " = animation activée" item_add 96,right$(bl$+str$(info%(11)),4) + " = intervalle en ms" item_add 96,right$(bl$+str$(info%(12)),4) + " = sprite visible" return
panit: if SC2D_Panoramic%(9)=0 then return if SC2D_Panoramic%(10)=0 res% = dll_call4("ScrollScene2D",SC2D%,1,0,0) caption 17,"Bloquer fond" else res% = dll_call4("ScrollScene2D",SC2D%,0,0,0) caption 17,"Libérer fond" end_if return
Dernière édition par Klaus le Mar 3 Mai 2016 - 0:05, édité 1 fois | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Lun 2 Mai 2016 - 23:59 | |
| Puisque l'on est dans les demandes un peu spécifiques mais bien pratique, tu pourrais avoir une fonction aussi pour charger le fond à partir d'un motif répété. Contrairement à la fonction qui adapte la taille de l'image à celle du fond. Là, ce serait juste le motif qui serait appliquer sans changement de taille autant de fois que nécessaire pour remplir le fond. (Une trame, un pattern, motif, brush, ...) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2016 - 0:04 | |
| Ce que je pourrais faire, ce serait de prendre une bitmap (par le press-papier, par exemple) et la répéter autant de fois horizontalement que verticalement que nécessaire pour remplir la fenêtre du Scene2D. Un genre de texture répétée en mosaïque.
Pour les autres types que tu évoques (couleur, brush etc), il suffit de les appliquer sur un picture, de copier ce picture dans le presse-papier puis d'appliquer cette nouvelle fonction, non ?
Si tu penses que ça a un intérêt, je peux le faire.
Actuellement, si tu n'utilises pas le ViewPort (2ème paramètre 0 dans CreateScene2D), l'image de fond sera affichée comme avec Stretch_Draw d'un objet Pcture. Ce n'est pas suffisant ? Note bien que la mosaïque est faisable...
Comparé à un Scene2d classique, c'est déjà pas mal avancé, non ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2016 - 2:01 | |
| oui pour faire des fond rapide pour les jeux à partir d'un petit motif de base, c'est pratique (Ca permet d'avoir une petite image pour chaque niveau pour tout un fond qui change visuellement). J'ai essayé un peu (je débute) ta doc et les fonction. Pour le moment, ça donne ça: http://www.fichier-zip.com/2016/05/03/kgf-sprites/J'ai juste chargé les sprites dans le scene_2D, tout est statique et je vais m'attaquer maintenant à les mettre en mouvement et à détecter les collisions. Il faut aussi que je rajoute 3 sprites qui fassent la droite, le haut et la gauche du scene_2d pour que l'on détecte les collisions. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2016 - 2:52 | |
| Je vais regarder ton fichier demain. Pour aujourd'hui, je ferme boutique. Ceci dit, j'ai fait une fonction - Code:
-
res% = dll_call4("LoadMosaicBackgroundToScene2D",SC2D%,w%,h%,adr(f$)) qui marche déjà, chez moi. Je ferai la doc et la distribution demain. A l'exécution, c'est ultra-rapide. La fonction accepte des BMP et des JPG, ou le contenu du presse-papier si le dernier paramètre est 0. Bonne nuit ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2016 - 9:06 | |
| OK, pas de problème, le programme est très simple pour le moment. La prochaine fois que j'y passe un peu de temps, je rajouterais les zone de détection et la gestion du changement de l'edit signalant un événement. C'est là que ça va devenir puissant et intéressant | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 3 Mai 2016 - 9:32 | |
| KGF.dll V6.54 du 03/05/2016Nouveautés: - nouvelle fonction: LoadMosaicBackgroundToScene2DModules modifiés: KGF.dll Scened2D.docLa doc et les sources sources sont à jour. Cette fonction permet de définir la taille finale de l'image de fond (pouvant dépasser la taille du viewport pour permettre le déplacement du fond), ainsi qu'une vignette. Cette vignette sera dupliquée autant de fois qye nécessaire pour "paver" l'image de fond. L'étiquette peut provenir d'un fichier BMP ou JPG, ou alors on utilise l'image contenue dans le presse-papier. Toute l'opération est très rapide. Voici le programme de démo avec un nouveau bouton "Fond mosaïque": - Code:
-
' test_Scene2D_Klaus.bas
label arriere, avant, cacher, cachertout, montrertout label event, fixe, mobile, mobiletout, zoomplus, zoommoins label changerimg, imagelist, changerilb label deplacer, info1, info2, panit, mosaic
dim res%, SC2D%, SC2D_PS%, IL%, w%, h%, f$, sInfo%, i% dim sversion$, iversion% : sversion$ = string$(255," ") dim kversion$ : kversion$ = string$(25," ")
dim M1% : M1% = 0 - 1 dim bl$ : bl$ = string$(5," ") dim back$ : back$ = "SC2D_fond.jpg" dim sprite0$ : sprite0$ = "SC2D_sprite4.bmp" dim sprite1$ : sprite1$ = "SC2D_sprite8.bmp" dim sprite2$ : sprite2$ = "SC2D_sprite3.bmp" dim sprite3$ : sprite3$ = "crane.bmp"
width 0,1000 : height 0,700
dll_on "KGF.dll" iversion% = dll_call1("GetVersionOfScene2D",adr(sversion$)) res% = dll_call1("KGFdllVersion",adr(kversion$)) caption 0,trim$(sversion$)+" dans "+kversion$
button 1 : top 1 ,10 : left 1,10 : caption 1,"En arrière" : on_click 1,arriere button 2 : top 2, 10 : left 2,100 : caption 2,"En avant" : on_click 2,avant button 3 : top 3, 10 : left 3,190 : caption 3,"Cacher" : on_click 3,cacher button 4 : top 4, 10 : left 4,280 : caption 4,"Cacher tout" : on_click 4,cachertout button 5 : top 5, 10 : left 5,370 : caption 5,"Montrer tout" : on_click 5,montrertout button 6 : top 6, 10 : left 6,460 : caption 6,"Fixe" : on_click 6,fixe button 7 : top 7, 10 : left 7,550 : caption 7,"Mobile" : on_click 7,mobile button 8 : top 8, 10 : left 8,640 : caption 8,"Mobile tout" : on_click 8,mobiletout
button 9 : top 9, 40 : left 9,640 : caption 9,"Déplacer" : on_click 9,deplacer button 10 : top 10, 70 : left 10,640 : caption 10,"Zoom +" : on_click 10,zoomplus button 11 : top 11,100 : left 11,640 : caption 11,"Zoom -" : on_click 11,zoommoins button 12 : top 12,130 : left 12,640 : caption 12,"Changer img" : on_click 12,changerimg button 13 : top 13,160 : left 13,640 : caption 13,"ImageList" : on_click 13,imagelist button 14 : top 14,190 : left 14,640 : caption 14,"Changer ilb" : on_click 14,changerilb button 15 : top 15,220 : left 15,640 : caption 15,"Info Scene2D" : on_click 15,info1 button 16 : top 16,250 : left 16,640 : caption 16,"Info Sprite" : on_click 16,info2 button 17 : top 17,280 : left 17,640 : caption 17,"Bloquer fond" : on_click 17,panit button 18 : top 18,310 : left 18,640 : caption 18,"Fond mosaïque" : on_click 18,mosaic
memo 96 : top 96,10 : left 96,730 : width 96,220 : height 96,400 font_name 96,"Courier" : font_size 96,8 open_dialog 97 edit 98 : hide 98 : on_change 98,event alpha 99 : top 99,450 : left 99,10 : caption 99,"en attente"
SC2D% = dll_call2("CreateScene2D",handle(0),1) SC2D_PS% = dll_call2("SetInterfaceOfScene2D",SC2D%,0) dim SC2D_Panoramic%(SC2D_PS%) SC2D_Panoramic%(0) = SC2D_PS% SC2D_Panoramic%(1) = handle(98) SC2D_PS% = dll_call2("SetInterfaceOfScene2D",SC2D%,adr(SC2D_Panoramic%)) res% = dll_call6("ResizeScene2D",SC2D%,10,40,600,400,1) res% = dll_call2("LoadBackgroundToScene2D",SC2D%,adr(back$))
res% = dll_call6("CreateSpriteInScene2D",SC2D%,50,130,0,200,adr(sprite0$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,150,30,0,100,adr(sprite1$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,250,30,0, 0,adr(sprite2$)) res% = dll_call6("CreateSpriteInScene2D",SC2D%,350,30,0,200,adr(sprite3$))
res% = dll_call6("DefineSpriteContactInScene2D",SC2D%,1,70,70,70,70) res% = dll_call3("ChangeSpriteOptionsInScene2D",SC2D%,1,0)
' activer les 2 lignes suivantes pour tester la suppression d'un sprite ! ' message "Taper RETURN pour continuer..." ' res% = dll_call2("DeleteSpriteInScene2D",SC2D%,3)
' activer les 2 lignes suivantes pour tester la suppression du Scene2D ! ' message "Taper RETURN pour continuer..." ' res% = dll_call1("DeleteScene2D",SC2D%)
end
' ChangeSpriteAttributesInScene2D(id%,ind%,vis%,sel%,mov%,ord%) ' id% = identifiant du Scene2D ' ind% = indice du sprite (1,2,3) ' ou 0 pour sprite sélectionné ' ou -1 pour tous les sprites, uniquement pour la visibilité ' vis% = 0 pour invisible ou 1 pour visible ' sel% = 0 pour non sélectionnable et 1 pour sélectionnable ' mov% = 0 pour non déplaçable et 1 pour déplaçable ' ord% = 1 pour "en avant" ou -1 pour "en arrière" ou 0 pour "pas de changement '
event: if text$(98)="status" caption 99,"sprite "+str$(SC2D_Panoramic%(2))+" à "+str$(SC2D_Panoramic%(3))+","+str$(SC2D_Panoramic%(4))+" dimension "+str$(SC2D_Panoramic%(5))+","+str$(SC2D_Panoramic%(6))+" collision: "+str$(SC2D_Panoramic%(7))+" contact: "+str$(SC2D_Panoramic%(8)) end_if return
arriere: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,M1%) return avant: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,1) return cacher: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,0,1,1,0) return cachertout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,0,1,1,0) return
montrertout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,1,1,1,0) return
fixe: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,0,0) return mobile: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,0,1,1,1,0) return
mobiletout: res% = dll_call6("ChangeSpriteAttributesInScene2D",SC2D%,M1%,1,1,1,0) return
deplacer: res% = dll_call4("ChangeSpritePositionInScene2D",SC2D%,0,200,220) return zoomplus: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if w% = (SC2D_Panoramic%(5)*3)/2 h% = (SC2D_Panoramic%(6)*3)/2 res% = dll_call4("ChangeSpriteSizeInScene2D",SC2D%,0,w%,h%) return zoommoins: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if w% = (SC2D_Panoramic%(5)*2)/3 h% = (SC2D_Panoramic%(6)*2)/3 res% = dll_call4("ChangeSpriteSizeInScene2D",SC2D%,0,w%,h%) return changerimg: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if filter 97,"Fichier BMP|*.bmp" f$ = file_name$(97) if f$="_" then return res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,0,adr(f$)) return imagelist: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if filter 97,"Fichier ILB|*.ilb" f$ = file_name$(97) if f$="_" then return if IL%<>0 then res% = dll_call1("DeleteImageList",IL%) IL% = dll_call2("CreateImageList",16,16) : ' en vue de KGF.ilb - à changer selon les besoins ! res% = dll_call2("LoadImageList",IL%,adr(f$)) res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,1,IL%) return
changerilb: if SC2D_Panoramic%(2)=0 message "Aucun sprite n'est sélectionné" return end_if if message_input("ImageList","Indice de l'image à utiliser: ","0")<>1 then return res% = val(message_text$) if res%<0 then return res% = dll_call4("ChangeSpriteImageInScene2D",SC2D%,0,2,res%) return info1: clear 96 sInfo% = dll_call2("InformAboutScene2D",SC2D%,0) if variable("info%")=1 then free info% dim info%(sInfo%) info%(0) = sInfo% res% = dll_call2("InformAboutScene2D",SC2D%,adr(info%)) item_add 96,"Scene2D:" item_add 96,right$(bl$+str$(info%(0)),4) + " = nombre d'éléments" item_add 96,right$(bl$+str$(info%(1)),4) + " = nombre de sprites" item_add 96,right$(bl$+str$(info%(2)),4) + " = ID du sprite actif" item_add 96,right$(bl$+str$(info%(3)),4) + " = left du Scene2D" item_add 96,right$(bl$+str$(info%(4)),4) + " = top du Scene2D" item_add 96,right$(bl$+str$(info%(5)),4) + " = width du Scene2D" item_add 96,right$(bl$+str$(info%(6)),4) + " = height du Scene2D" item_add 96,right$(bl$+str$(info%(7)),4) + " = viewport utilisé" item_add 96,right$(bl$+str$(info%(8)),4) + " = déplacement fond" item_add 96,right$(bl$+str$(info%(9)),4) + " = left du viewport" item_add 96,right$(bl$+str$(info%(10)),4) + " = top du viewport" return info2: clear 96 sInfo% = dll_call3("InformAboutSpriteInScene2D",SC2D%,0,0) if variable("info%")=1 then free info% dim info%(sInfo%) info%(0) = sInfo% res% = dll_call3("InformAboutSpriteInScene2D",SC2D%,0,adr(info%)) item_add 96,"Scene2D:" item_add 96,right$(bl$+str$(info%( 0)),4) + " = nombre d'éléments" item_add 96,right$(bl$+str$(info%( 1)),4) + " = nombre de sprites" item_add 96,right$(bl$+str$(info%( 2)),4) + " = indice du sprite" item_add 96,right$(bl$+str$(info%( 3)),4) + " = left du sprite" item_add 96,right$(bl$+str$(info%( 4)),4) + " = top du sprite" item_add 96,right$(bl$+str$(info%( 5)),4) + " = width du sprite" item_add 96,right$(bl$+str$(info%( 6)),4) + " = height du sprite" item_add 96,right$(bl$+str$(info%( 7)),4) + " = résistance" item_add 96,right$(bl$+str$(info%( 8)),4) + " = ImageList" item_add 96,right$(bl$+str$(info%( 9)),4) + " = indice ImageList" item_add 96,right$(bl$+str$(info%(10)),4) + " = animation activée" item_add 96,right$(bl$+str$(info%(11)),4) + " = intervalle en ms" item_add 96,right$(bl$+str$(info%(12)),4) + " = sprite visible" return
panit: if SC2D_Panoramic%(9)=0 then return if SC2D_Panoramic%(10)=0 res% = dll_call4("ScrollScene2D",SC2D%,1,0,0) caption 17,"Bloquer fond" else res% = dll_call4("ScrollScene2D",SC2D%,0,0,0) caption 17,"Libérer fond" end_if return mosaic: filter 97,"Fichiers BMP|*.bmp" f$ = file_name$(97) if f$="_" then return res% = dll_call4("LoadMosaicBackgroundToScene2D",SC2D%,1200,800,adr(f$)) return
| |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |