Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

23.12.2011, 14:47

Multi-Touch in iOS: ein schwieriges Thema

Hi, ich bin gerade dabei, meine 3D Engine in die Startlöcher für den neuen Release zu bringen. Dabei hänge ich aber gerade leider an dem Multi-Touch Part von iOS.
Und zwar kann es passieren, dass sich der Index der einzelnen Touch-Events verändert. D.h. wenn jemand einen Finger auf das iPad setzt, dann hat dieses Touch-Event den Index 0 und wenn dann
noch ein Finger auf das iPad kommt kann es passieren, dass das neue Touch-Event den Index 0 hat und das alte Event auf einmal den Index 1.
Das sollte aber nicht passieren. Neue Touch-Events sollten sich immer hinten an stellen. Sonst kommt mein Code mit der Reihenfolge durcheinander.
Z.B. für meine zwei Controller (links einen und rechts einen um z.B. die Kamera zu bewegen und zu drehen).

Hier ist mein Object-C Code in dem ich die Touch-Events abfange:

Quellcode

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
31
32
33
34
35
36
37
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesBegan:touches withEvent:event];
    NSSet* touchSet = [event allTouches];
    
    int i = 0;
    for (id touch in touchSet)
    {
        CGPoint Point = [touch locationInView:self];
        
        iOS_SetTouchBegin(i++, Point.x, Point.y);
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];
    NSSet* touchSet = [event allTouches];
    
    int i = 0;
    for (id touch in touchSet)
    {
        CGPoint Point = [touch locationInView:self];
        
        iOS_SetTouchMove(i++, Point.x, Point.y);
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent:event];
    NSSet* touchSet = [event allTouches];
    
    int i = 0;
    for (id touch in touchSet)
        iOS_SetTouchEnd(i++);
}


Falls jemand schon mal ein ähnliches Problem hatte und einen Lösungsvorschlag für mich hat, möge mir bitte auf die Sprünge helfen.

Gruß,
Lukas

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

23.12.2011, 15:29

Das sollte aber nicht passieren.
Doch, soll es ;)
Wenn Du eh "links" und "rechts" hast, dann würde ich vorschlagen sie auch anhand dieser Positionen zu behandeln.
(ich find's persönlich nich so hübsch, dass Du Objective-C und C-Calls mischst, aber das ist nur Formsache)

Eventuell ist das ja was für Dich: http://www.codedojo.com/?p=1030
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (23.12.2011, 15:35)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

23.12.2011, 15:37

Hab ich jetzt auch erst mal so gemacht. Aber problematisch ist es trotzdem. Ich meine welchen Sinn hat es, wenn sich auf einmal der Index ändert??
Allerdings gibt es noch ein Problem, das ich gerade feststellen musste. "touchesMoved" wird anscheinend nur aufgerufen, wenn sich die Position des jüngsten Touch-Events ändert.

Wegen Objective-C: ich kann die Syntax dieser Sprache eh nicht leiden, da lege ich wenig Wert auf Formalitäten. Außerdem verwende ich ohne hin Objective-C++, damit ich auch noch C++ verwenden kann.
Aber keine Sorge: meine Engine wird so wenig Objective-C Code beinhalten wie eben möglich. Alles was mit dem Cocoa-Framework zu tun hat muss dann derjenige coden, der die Engine nutzt.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

23.12.2011, 15:40

touchesMoved sollte immer aufgerufen werden, nicht nur für den letzten Touch.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige