Drag objet par objet

124678

Réponses

  • AliGatorAliGator Membre, Modérateur
    05:57 modifié #92
    dans 1238111604:

    J'aime bien aussi les algos de Backtracking pour tout ce qui est résolution...
    A ce propos, quelqu'un sait s'il existe une API d'interprétation Prolog en Objective-C ? Ca permettrait de faire des algos de résolution super sympas en peu de lignes, j'ai toujours adoré ce principe ;)
  • schlumschlum Membre
    05:57 modifié #93
    Directement, je ne crois pas... mais on doit pouvoir faire un wrapper sur swi-prolog avec "popen"...
  • CeetixCeetix Membre
    05:57 modifié #94
    Oui l'alpha beta on s'en ai servi pour faire un jeu de plateau. Enfin c'etait le MinMax, c'est déjà  pas mal du tout!
    Sinon là  sur mon graphe j'affiche l'info du noeud et le poid de chaque arc, c'est cool ^^.
    Je vais essayer d'implementer dijkstra et de mettre dans une autre couleur mes liaisons.
  • CeetixCeetix Membre
    05:57 modifié #95
    J'essaie d'utilise la méthode -(void)mouseMoved:(NSEvent *)theEvent;
    pour avoir la position de ma souris sur ma vue mais ca ne marche pas. J'ai ce code tout bete:

    <br />- (void)mouseMoved:(NSEvent *)theEvent {<br /><br />	/*posSouris est un NSPoint */<br />	posSouris = [theEvent locationInWindow];<br /><br />	NSLog(@&quot;%f , %f&quot;,posSouris.x,posSouris.y);<br />}<br />
    


    Je vois pas ce qui cloche ...
  • schlumschlum Membre
    mars 2009 modifié #96
    Pour utiliser "mouseMoved", il faut que la fenêtre retourne "true" pour "- (BOOL)acceptsMouseMovedEvents" (ce qui n'est pas le comportement par défaut).

    Pour l'algorithme min-max, oui... il est plutôt simple celui-ci ; je l'avais re-découvert tout seul y a des années en bossant sur un jeu de morpion 3D  :) (comment ré-inventer la poudre...  :( )... Mais l'alpha-bêta c'est une super optimisation !
  • CeetixCeetix Membre
    05:57 modifié #97
    Ca ne marche pas ... :(
  • schlumschlum Membre
    05:57 modifié #98
    Je crois qu'il faut faire "[theWindow setAcceptsMouseMovedEvents:YES];" dans le "awakeFromNib" si je me souviens bien.
  • CeetixCeetix Membre
    05:57 modifié #99
    Le truc c'est que je n'ai pas de window... je suis perdu là  .
  • schlumschlum Membre
    05:57 modifié #100
    Une vue a toujours une fenêtre... Sauf si c'est pour iPhone auquel cas je ne sais pas exactement comment ça fonctionne, mais il doit y avoir un mécanisme équivalent.
  • CeetixCeetix Membre
    05:57 modifié #101
    Ah lol ... J'ai pas mis moi ... Enfin je crois pas .
  • schlumschlum Membre
    05:57 modifié #102
    Regarde ce que renvoie l'appel de "- (NSWindow *)window" sur ta vue, tu seras fixé...
  • AliGatorAliGator Membre, Modérateur
    05:57 modifié #103
    Pour info sur iPhone y'a une UIWindow parente forcément dans ton application (et en général unique).
    Par contre il n'y a pas dans la UIWindow class reference de mention à  une méthode équivalente à  celle citée pour les mouseMovedEvents... Mais en même temps c'est normal vu qu'il n'y a pas de mouse sur iPhone, mais que des "Touch" (et donc implémenter dans ce cas touchBegan/touchMoved/touchEnded) :P évènements que toute vue bien élevée reçoit du moment que sa propriété allowUserInteraction est à  YES.

    Après pour Mac je sais pas, je te laisse dans les mains de schlum :D
  • schlumschlum Membre
    05:57 modifié #104
    c'est intéressant  ;)
    Et dans le cas du multi-touch, ça fonctionne comment ?
  • AliGatorAliGator Membre, Modérateur
    05:57 modifié #105
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;<br />- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;<br />- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;<br />- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
    

    Les différents "touch" ajoutés se retrouvent dans le NSSet, ainsi que dans le UIEvent (qui est composé de UITouches)

    In iPhone OS, a touch is the presence or movement of a finger on the screen that is part of a unique multi-touch sequence. For example, a pinch-close gesture has two touches: two fingers on the screen moving toward each other from opposite directions. There are simple single-finger gestures, such as a tap, or a double-tap, or a flick (where the user quickly swipes a finger across the screen). An application might recognize even more complicated gestures; for example, an application might have a custom control in the shape of a dial that users “turn” with multiple fingers to fine-tune some variable.

    An event is an object that the system continually sends to an application as fingers touch the screen and move across its surface. The event provides a snapshot of all touches during a multi-touch sequence, most importantly the touches that are new or have changed for a particular view. A multi-touch sequence begins when a finger first touches the screen. Other fingers may subsequently touch the screen, and all fingers may move across the screen. The sequence ends when the last of these fingers is lifted from the screen. An application receives event objects during each phase of any touch.

    Touches have both temporal and spatial aspects. The temporal aspect, called a phase, indicates when a touch has just begun, whether it is moving or stationary, and when it ends"that is, when the finger is lifted from the screen (see Figure 3-1). A touch also has the current location in a view or window and the previous location (if any). When a finger touches the screen, the touch is associated with a window and a view and maintains that association throughout the life of the event. If multiple touches arrive at once, they are treated together only if they are associated with the same view. Likewise, if two touches arrive in quick succession, they are treated as a multiple tap only if they are associated with the same view.

    event_touch_time.jpg

    In iPhone OS, a UITouch object represents a touch, and a UIEvent object represents an event. An event object contains all touch objects for the current multi-touch sequence and can provide touch objects specific to a view or window (see Figure 3-2). A touch object is persistent for a given finger during a sequence, and UIKit mutates it as it tracks the finger throughout it. The touch attributes that change are the phase of the touch, its location in a view, its previous location, and its timestamp. Event-handling code evaluates these attributes to determine how to respond to the event.
    event_touch_contains.jpg
  • schlumschlum Membre
    05:57 modifié #106
  • CeetixCeetix Membre
    05:57 modifié #107
    je te laisse dans les mains de schlum :D


    Ca va chi*** ^^

    Bon en fait j'ai pas continuer, je mettais mon code au propre et en le commentant toutes les lignes.
    Mais j'ai pas de variable window définie dans mes classes...
  • CeetixCeetix Membre
    05:57 modifié #108
    C'est un peu HS mais j'ai pas trop envie de multiplier le post. Je suis tjs sur mon projet de graphe j'aimerai juste mettre un window "textured" quand je le fais et que je compile et que je bouge mes sommets d'arc ma window bouge avec ce qui fait que je ne peux pas bouger mes sommets. Vous savez si on peut désactiver ce déplacement de window ?
  • Philippe49Philippe49 Membre
    05:57 modifié #109
    [window setMovableByWindowBackground:NO];
  • CeetixCeetix Membre
    05:57 modifié #110
    merci Philippe ;)
  • schlumschlum Membre
    05:57 modifié #111
    dans 1238169919:

    je te laisse dans les mains de schlum :D


    Ca va chi*** ^^

    Bon en fait j'ai pas continuer, je mettais mon code au propre et en le commentant toutes les lignes.
    Mais j'ai pas de variable window définie dans mes classes...


    Pas besoin de variable outlet "window" en général (sauf quand on l'utilise très souvent, ça peut être pratique !)
    À partir de n'importe quelle vue, on peut accéder à  la fenêtre avec la méthode "window".
  • CeetixCeetix Membre
    05:57 modifié #112
    Hum ok je vois ce que tu veux dire mais je vois pas comment y accéder, enfin comment m'en servir...
  • schlumschlum Membre
    05:57 modifié #113
    Dans la vue, t'as bien mis un "- (void)mouseMoved:(NSEvent *)theEvent" non ?
    Ben suffit de mettre un "- (void)awakeFromNib"

    - (void)awakeFromNib<br />{<br />&nbsp; &nbsp; [[self window] setAcceptsMouseMovedEvents:YES];<br />}
    
  • CeetixCeetix Membre
    05:57 modifié #114
    Yes merci beaucoup Schlum !
  • CeetixCeetix Membre
    05:57 modifié #115
    Sinon j'ai demandé à  mon prof d'info pour placé simplement et judicieusement mes sommets sans pour le moment faire de la topologie. Il m'a conseillé de dessiner un cercle et de placer mes sommets  sur son contour tous les 360°/ nbeSommet. Ca me parait être une bonne idée.
  • schlumschlum Membre
    05:57 modifié #116
    Une bonne idée s'il y a peu de sommets, une très mauvaise s'il y en a beaucoup  :P
    (plus il y aura de sommets, plus ils seront localement quasi-alignés)
  • CeetixCeetix Membre
    05:57 modifié #117
    oui, pour le moment on bosse avec peu de sommet c'est pour ça qu'il m'a conseillé ça.
    Tenez j'ai mis une petite vidéo pour vous montrer où j'en suis. Je suis assez content de moi.

    Et vous savez pourquoi quand je run mon app, dans la console ça affiche pleins de ligne avec :
    <Error>: CGContextSetCompositeOperation: invalid context
    <Error>: CGContextFillRects: invalid context

    etc ...
    et comment je peux les enlever?
  • CeetixCeetix Membre
    05:57 modifié #118
    J'ai tracé mon cercle avec ce code :
    <br />&nbsp; &nbsp; &nbsp; &nbsp; NSRect rectangleRepere = NSMakeRect(100, 50, 400, 400);<br />	NSBezierPath *monTracer = [NSBezierPath bezierPath];<br />	[monTracer appendBezierPathWithOvalInRect:rectangleRepere];<br />	[[NSColor grayColor]set];<br />	[monTracer stroke];<br />
    


    Je voulais savoir si c'était la bonne méthode car j'ai besoin de ce cercle pour placer mes sommets/noeud sur son contour.
  • Philippe49Philippe49 Membre
    05:57 modifié #119
    Pourquoi pas, il y a aussi [NSBezierPath bezierPathWithOvalInRect: .. ] en direct.
  • CeetixCeetix Membre
    05:57 modifié #120
    ah oui ca économise des lignes ^^.
    Bon le plus dur reste à  faire, positionner mes sommets sur ce cercle :)
  • CeetixCeetix Membre
    05:57 modifié #121
    Au fait pas d'idée pour mes messages d'erreurs ? (cf 4 posts plus haut )
Connectez-vous ou Inscrivez-vous pour répondre.