Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 25 184 637

  • Nb. de membres 187
  • Nb. d'articles 1 270
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» 3 mini moteur Hollywood pour un jeux...

3 mini moteur Hollywood pour un jeux... #923

3Contributeur(s)
artblinksinisruscritonsgate
3 Modérateur(s)
K-LElwoodcorto
artblink artblinkicon_post
Hello,

Qui peut m'aider à démarrer un petit moteur de jeu avec les layers, j'ai besoin juste d'un point de départ, ensuite sa ira tous seul.

Voici en cadeau 2 techniques d'animation

1 - Technique d'animation avec les Sprites:


@SCREEN?{Mode?=?"ask",?Width?=?320,?Height?=?256}
@SPRITE?1,"Fighter1.bmp",{width=52,height=52,frames=4,FPR=4,Transparency?=?#WHITE}

X=160
Y=100
XB=1

LeftMouseQuit(True)
EscapeQuit(True)

Function?Joueur()
????If?IsKeyDown("Left")=False?And?IsKeyDown("Right")=False?Then?xb=1
????If?IsKeyDown("Left")=True?Then?Gauche()
????If?IsKeyDown("Right")=True?Then?Droite()
????DisplaySprite(1,X,Y,XB)
EndFunction

Function?Gauche()
????X=X-10
????XB=0
????If?X<10?Then?X=10
EndFunction

Function?Droite()
????X=X+10
????XB=0
????If?X>640?Then?X=640
EndFunction

Function?PRG()
????Joueur()
EndFunction

SetInterval(1,PRG,1000/15)

Repeat
WaitEvent
Forever



1 - Technique d'animation avec les Brush (double buffering):


@SCREEN?{Mode?=?"ask",?Width?=?320,?Height?=?256}
LoadBrush(1,?"Fighter1.bmp",?{Transparency?=?#WHITE})

X=160
Y=100
XB=52
SB=52

LeftMouseQuit(True)
EscapeQuit(True)

Function?Joueur()
????If?IsKeyDown("Left")=False?And?IsKeyDown("Right")=False?Then?xb=0
????If?IsKeyDown("Left")=True?Then?Gauche()
????If?IsKeyDown("Right")=True?Then?Droite()
????DisplayBrushPart(1,XB,0,X,Y,52,52)
EndFunction

Function?Gauche()
????If?XB=0?Then?SB=52
????X=X-10
????XB=XB+SB
????If?XB=156?Then?SB=-52
????If?XB=52?Then?SB=52
????If?X<10?Then?X=10
EndFunction

Function?Droite()
????If?XB=0?Then?SB=52
????X=X+10
????XB=XB+SB
????If?XB=156?Then?SB=-52
????If?XB=52?Then?SB=52
????If?X>640?Then?X=640
EndFunction

Function?PRG()
????Flip
????Cls
????Joueur()
EndFunction

SetInterval(1,PRG,1000/15)
BeginDoubleBuffer

Repeat
WaitEvent
Forever



3 - Technique d'animation avec layers :


JE?SECHE?LOL



Bon, vous inquiétez pas, le déplacement de l'objet se fait de 10 par 10 pixels (normal l'objet est assez grand 52x52), j'utilise une image de 4x52pixel (animation en 3 partie car le premier 0,0 à 52x52 est la position statique de l'animation de l'objet entre autre un homme qui marche)

@SPRITE 1,"Fighter1.bmp",{width=52,height=52,frames=4,FPR=4,Transparency = #WHITE} défini une animation de 4 image de 52x52 sur 4 colones (4 images sur la même ligne découper à partir d'une même image)
tandis que DisplayBrushPart(1,XB,0,X,Y,52,52) fais en plus le déplacement de l'objet XB étant l'offset (en pixel) qui permet d'aller chercher dans une image la partie qui nous intéresse.

J'ai créer une planche de 640x480 ou toutes les images de l'animation sont affichées, sa me permet de piquer de n'importe ou l'image 52x52 qui m'intéresse sur l'image global de 640x480.

Qui peut m'aider pour les layers parmis les nombreux programmeurs francais Hollywood ;-)

Merci d'avance
Edit:
@citronsgate: T'as vu, j'ai écouter tes conseils ;-) : Code indenter
Fin Edit
Respect
Message édité par : artblink / 26-11-2010 18:40
artblink artblinkicon_post
Hello,

Pour les layers, j'ai trouvé sa, mais le problème, c'est le CLS, je n'en veux pas, sa alourdi le Prg, qui peut m'aider? j'ai essayé avec movelayer(), mais il ne m'affiche rien..

Voici un début de code



@SCREEN {Mode = "ask", Width = 320, Height = 256}
LoadBrush(1, "Fighter1.bmp", {X=0,Y=0,Width=52,Height=52,Transparency = #WHITE})
LoadBrush(2, "Fighter1.bmp", {X=52,Y=0,Width=52,Height=52,Transparency = #WHITE})
LoadBrush(3, "Fighter1.bmp", {X=104,Y=0,Width=52,Height=52,Transparency = #WHITE})
LoadBrush(4, "Fighter1.bmp", {X=156,Y=0,Width=52,Height=52,Transparency = #WHITE})
X=160
Y=100
XB=1
SB=1
LeftMouseQuit(True)
EscapeQuit(True)



Function Joueur()
    If IsKeyDown("Left")=False And IsKeyDown("Right")=False Then xb=1
    If IsKeyDown("Left")=True Then Gauche()
    If IsKeyDown("Right")=True Then Droite()
    AddMove (1,#BRUSH,XB,X,Y)
    DoMove(1)     
    ClearMove(1)  
    
EndFunction

Function Gauche()
    If XB=1 Then SB=1
    X=X-10
    XB=XB+SB
    If XB=4 Then SB=-1
    If XB=1 Then SB=1
    If X<10 Then X=10
EndFunction

Function Droite()
    If XB=1 Then SB=1
    X=X+10
    XB=XB+SB
    If XB=4 Then SB=-1
    If XB=1 Then SB=1
    If X>640 Then X=640
EndFunction

Function PRG()
    Cls ; Je veux enlever cette commande
    Joueur()
EndFunction
EnableLayers   
SetInterval(1,PRG,1000/20)


Repeat
WaitEvent
Forever



Combine trouvé, piqué chaque bout d'animation et les enregistré dans plusieurs Brush... j'ai trouvé que sa... snif

Merci

Respect
sinisrus sinisrusicon_post
tu peu pas créer des tableau (array) avec hollywood enfin je suis pas tres fort dans le developpement donc je ne sais pas du tout si cela peut te mettre sur une piste
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon Saphir HD7750 R7 250E - 2Go de ram
artblink artblinkicon_post
Si, les tableaux sous Hollywood sont extrêmement simple à créer, le problème des Layers(calque), c'est que l'on ne peut changer l'image d'un calque déjà créer, la seul facon et de créé par exemple pour une animation de 3 phases, 3 calques différent, donc, 3 calques sont affiché avec un offset en X de 10 pixel, donc je suis obligé de faire un clear screen et de tous redessiner... alors que le principe du layer c'est qu'on peu le déplacer sans être obliger d'effacer l'écran (layer c'est en gros comme un sprite, sauf qu'avec les layers, on peut faire bien plus de chose). J'utilise plutôt les tableaux pour créer des objet 3D (ou plutôt vectorielle ;-) ) grâce à la commande Polygon.

Mes deux moteur sprite et Brush fonctionne très bien (juste une partie d'afficher sur le forum qui fonctionne ), mais en gros, j'aimerai fair un moteur avec les layers pour pouvoir testé leurs vitesse.

mais attend, tu m'a peut être donnée une idée, je vais testé sa.

Merci

Respect
critonsgate critonsgateicon_post
Exemple de layers animé pour un starfield fullscreen :
; cette fonction rafraichi le layer etoiles
Function p_!refresh!_starfield()

; Si on ne crée pas de mask, pas de transparence du layer...
SelectMask(n_layer_star,#LAYER)
SetMaskMode(#MASKINVISIBLE)
Cls ; Tous les pixels sont transparents.
SetMaskMode(#MASKVISIBLE) ; permet l'ajout de pixels visibles
EndSelect
SelectLayer(n_layer_star, #SELMODE_COMBO)
For Local i = 0 To 498
Plot(stars[i].x, stars[i].y, stars[i].color)
Next
EndSelect()

EndFunction

Combiné avec les fonctions :

; cette fonction calcule l'avancée du starfield...
; TODO : Ajouter un angle en paramètre et calculer la position x et y des étoiles.
Function p_incrementer_Stars(i_orientationx, i_orientationy)
If i_orientationx = 1 And i_orientationy = 0
For Local i = 0 To 498
If stars[i].x >= 1024 Then stars[i].x = stars[i].x - 1024
stars[i].x = stars[i].x + stars[i].speed
Next
EndIf
If i_orientationx = 0 And i_orientationy = 1
For Local i = 0 To 498
If stars[i].y >= 768 Then stars[i].y = stars[i].y - 768
stars[i].y = stars[i].y + stars[i].speed
Next
EndIf
EndFunction
/* preparation du starfield */
Function p_InitStars()

; nous avons 399 étoiles
For Local i = 0 To 498
; pour x anciennement 720 et y anciennement 476
stars[i] = {
x = Rnd(1024),
y = Rnd(744) + 24,
speed = Rnd(10) + 1,
color = (Rnd(11) + 4) * 0x111111}

Next


CreateLayer(0,0,1024,768, {Name = "etoiles"})
n_layer_star = GetAttribute(#LAYER,"etoiles",#ATTRLAYERID)
layer_id = n_layer_star + 1

EndFunction

Avec les layers tu peux aussi utiliser les fonctions d'animations.

De plus un layer est modifiable au même titre qu'une brush, et tu peux utiliser toute une tripotée d'objet (plot, line, les polygones, les brushs) permettant l'écriture des pixels dans ceux-ci, et animer le layer par le biais de la fonction AsyncDrawFrame(obj) cela permet ainsi d'animer un ensemble de layer en même temps.


CritonSgate ~ Pegasos 2 G4 ~ Morphos 3.9
Ibook g4 - morphos 3.9
SAM 440 EP - 667 - os4 Final Édition
artblink artblinkicon_post
Donc, si j'ai bien compris, j'utilise loadbrush pour lire le fichier (1 image contenant 4 image d'animation à la suite)

Je défini un layer comme sortie vidéo, j'affiche mon brush qui s'anime en fonction du déplacement du layer... mmoooo c'est une méthode de filou, mais sa devrait marché

Merci citronsgate

Je tente ta technique et je te tiens au courant

Respect
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme