Skocz do zawartości

Witaj!

Zaloguj lub Zarejestruj się aby uzyskać pełny dostęp do forum.

Zdjęcie
- - - - -

Hmm jak sie za to zabrac?


  • Zaloguj się, aby dodać odpowiedź
19 odpowiedzi w tym temacie

#1 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 06 czerwca 2010 - 16:31

Witam

Pisze bo nie mam bladego pojecia jak sie za to zabrac? czego uzyć?(chodzi mi o elementy UI) moze ktos mialby interesujacy mnie przyklad, albo choc nakierowal czego szukac aa teraz przejde do omowienia problemu otoz ponizej mamy plik PNG: Dołączona grafika

jak widać ma nie regularny kształt i każda z figur jest oznaczona kolejno cyframi 1,2...
Jak sprawić by Iphone wiedział która z nich kliknelismy

#2 Lestek

Lestek
  • 880 postów

Napisano 06 czerwca 2010 - 18:22

Zrób sobie klasę obiektów i narysuj każdy z nich. Dodaj metodę dotyku. Ja bym to zrobił jako child buttona o nieregularnych kształtach.

#3 _krzysiek

_krzysiek
  • 1 971 postów
  • SkądŁódź

Napisano 06 czerwca 2010 - 20:12

powinno to Ci pomóc:

//
//  Collision.h
//  Snake Adventures
//
//  Created by Krzysiek on 09-04-14.
//  Copyright 2009 chris-software.com. All rights reserved.
//

#import <Foundation/Foundation.h>


@interface Collision : NSObject {
	int corners;
	int I;
	CGPoint corner[20];
}
-(void)addCorner:(CGPoint)point;
-(BOOL)colission:(float)x:(float)y;
@end

//
//  Collision.m
//  Snake Adventures
//
//  Created by Krzysiek on 09-04-14.
//  Copyright 2009 chris-software.com. All rights reserved.
//

#import "Collision.h"


@implementation Collision



-(BOOL)colission:(float)x:(float)y {
	int i, j = 0;
	bool collision = false;
	
	for (i = 0; i < corners; i++) { 
		j++;
		if (j == corners)	j = 0;
		if (corner[i].y < y && corner[j].y >= y || corner[j].y < y && corner[i].y >= y)	{
			if (corner[i].x + (y - corner[i].y) / (corner[j].y - corner[i].y) *	(corner[j].x - corner[i].x) < x) collision = !collision;
		}
	}
	return collision;
}

-(void)addCorner:(CGPoint)point {
	corner[++I] = point;
	corners++;
}
-(void)start {
		
}
-(void)check {
}

@end



#4 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 06 czerwca 2010 - 20:13

oooo dzieki bede probowac to jakos ogarnac :)

#5 _krzysiek

_krzysiek
  • 1 971 postów
  • SkądŁódź

Napisano 06 czerwca 2010 - 20:42

PS chodzi o sprawdzenie czy aktualny punkt (x,y) mieści się w danym wielokącie. Wielokąt wprowadzasz np. w ten sposób:
collision[0] = [Collision alloc];
	[collision[0] addCorner:CGPointMake(268,1)];
	[collision[0] addCorner:CGPointMake(235,28)];
	[collision[0] addCorner:CGPointMake(213,94)];
	[collision[0] addCorner:CGPointMake(225,243)];
	[collision[0] addCorner:CGPointMake(312,227)];
	[collision[0] addCorner:CGPointMake(294,123)];
	[collision[0] addCorner:CGPointMake(312,67)];
	[collision[0] addCorner:CGPointMake(404,1)];

jedna klasa collision to jeden wielokąt

#6 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 06 czerwca 2010 - 21:20

teraz stało się to dla mnie bardziej zrozumiale :) na nic będę próbować, zapewne odezwie się za kilka dni wielkie dzięki za naprowadzenie

---------- Wpis dodano o 22:20 ---------- Poprzedni wpis dodano o 21:53 ----------

eh gubię się w tym ... jest szansa na wersje dla blondynek ?:P
np: przykładowy projekt

#7 _krzysiek

_krzysiek
  • 1 971 postów
  • SkądŁódź

Napisano 07 czerwca 2010 - 01:33

Copy 'n' paste programming? Poeksperymentuj. Wprowadź zwykly kwadrat do danych (0,0), (10,0), (10,10), (0,10) i zobacz co bedzie dla punktu (5,5) a co dla innych

#8 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 07 czerwca 2010 - 08:08

nie zupełnie Copy 'n' paste programming, chodzi o to by dobrze zrozumieć przykład

#9 wojtkow

wojtkow


  • 6 767 postów
  • Płeć:
  • SkądPoznań

Napisano 07 czerwca 2010 - 08:45

Zuki, nie obraź się, ale umiesz programować? Znasz objc? Jeżeli tak, to dzięki przykładowi Krzyśka sam pójdziesz dalej. Jeżeli na któreś z pytań odpowiadasz nie, to pora uzupełnić podstawy.

#10 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 07 czerwca 2010 - 08:53

Nie obrazam się ;) znam C++ z programowaniem na iPhone dopiero rozpoczynam przygodę, mam za sobą napisany jeden program wykorzystujacy accelerometer i posiadający prosty graficzny UI...

#11 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 07 czerwca 2010 - 12:37

mam problem z dodaniem wielokąta, mógłbyś opisać to dokładniej ?

#12 _krzysiek

_krzysiek
  • 1 971 postów
  • SkądŁódź

Napisano 07 czerwca 2010 - 12:57

Załączony przykład - post #5 prezentuje rzeczke powyżej mostu:
Dołączona grafika

Widzisz akurat część mapy z fragmentem lewym górnym czyli (0,0). Nałóż te punkty które pokazałem i zobaczysz jak ten wielokąt jest zbudowany.
Następnie do obiektu klasy Collision wysyłasz metodę
[obiekt collision:pozycjaGłowyWężaX:pozGłWęY];
i zwraca Ci informację, czy uderza jego głowa w rzeke, czy też nie.
W Twoim wypadku, jeżeli mamy Collision np. dla konkretnego wielokąta, znaczy, że użytkownik kliknął ten wielokąt.

swoją drogą żałuje, że nie dokończyłem tego projektu :|
Snake Adventures preprepre Alpha chyba w cydii jest dostępne jeżeli ktoś chciałby się pobawić

#13 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 07 czerwca 2010 - 13:08

W tym problem ze nie wiem jak to uczynić...

Przykład

siedzę nad tym ale naprawdę nie wiem... odrazu podkreslam: nie mowie ze macie to zrobic za mnie ale nakierowac:) bo to mnie znacznie wiecej nauczy niz jak ktos wykona to za mnie

#14 _krzysiek

_krzysiek
  • 1 971 postów
  • SkądŁódź

Napisano 07 czerwca 2010 - 13:30

Hmmm... przedewszystkim na następny raz nie rapidshare. Czekam kilkadziesiąt sekund aby dowiedzieć się że ktoś z Toya.net (kablówka Łódź) już pobiera coś z Rapida.

Przedewszystkim wypadałoby w nagłówku - Untitled2VC.h dodać informację o obiekcie, przecież będziesz go używał zawsze, a nie tylko przy deklaracji jego rogów. Kiedyś też zaczynałem programowanie w Obj-C mając doświadczenie w wielu innych językach i korzystałem z klasycznych tablic zamiast NSMutableArray, ale to nie istotne. Po prostu dodaj informacje w nagłówku o obiekcie collision klasy Collision oraz także poinformuj program, że Collision to nazwa klasy a nie z nikąd wzięta nazwa korzystając z @class:
@class Collision;
@interface Untitled2ViewController : UIViewController {
	Collision *collision;
}

@end

następnie zmień w Untitled2VC.m wszystkie collision[0] na collision i tym magicznym zabiegiem program nam się skompiluje.

Zuki to były tak masakryczne podstawy i najbardziej podstawowe aż rażące w oczy błędy, że zastanawia mnie czy w ogóle uczyłeś się, czy robisz program krok po kroku, gdzie każdy krok poprzedzasz tutorialem, a każdą niejasność forami z działami developerskimi? Daleko tak nie zajdziesz.

Teraz zostaje już tylko wprowadzenie danych.

nie mowie ze macie to zrobic za mnie ale nakierowac
W językach obiektowych bardzo często klasy są bardzo skomplikowane i nie koniecznie przystosowane do profilu/preferencji programisty - nie musisz przecież znać wszystkich frameworków, a nauka tego zajęłaby lata. Wiele klas trzeba nauczyć się używać, nie koniecznie trzeba zrozumieć. Np. analiza ASIHTTPRequest, parserów JSON to niezła katorga nawet dla doświadczonych programistów, wystarczy dodanie tego do projektu i możemy się skupić na kolejnym etapie, nie na odkrywaniu koła od nowa. Nie mniej jednak dziwienie się, czemu znikąd wzięta zmienna powoduje Fatal error compilatora, jest błędem poważnym. Nawet w PHP dodanie instrukcji i = j;, jeżeli j nigdzie wcześniej nie zostało zadeklarowane wyświetli warning.

Klasę Collision napisałem w kwietniu tamtego roku teraz inaczej bym do niej podszedł, ale napisałem ją sam w oparciu o matematyczny przykład pewnego profesora, który opowiadał jak sprawdzić, czy dany punkt należy do wielokąta.

Powodzenia w rozwijaniu umiejętności.

Kontynując póżniej metodą touchesBegin lub touchesEnded korzystając z ogólno dostępnych źródeł otrzymasz informacje w jakim (x,y) miejscu pojawił się/zniknął palec użytkownika/kursor myszy na symulatorze i zrobione.

#15 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 07 czerwca 2010 - 13:50

Tak kompiluje ale nie uruchamia(symulator) od razu wywala do SB

#16 _krzysiek

_krzysiek
  • 1 971 postów
  • SkądŁódź

Napisano 07 czerwca 2010 - 13:52

2010-06-07 14:50:44.866 Untitled2[7605:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Untitled2ViewController 0x3914650> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key open.'

w interfacebuilderze przycisk Open jest podpięty do nieistniejącego outletu open. Albo stwórz ponownie outlet albo usuń nieistniejącą referencje.

#17 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 07 czerwca 2010 - 14:02

Faktycznie, zupełnie o tym zapomniałem :)

---------- Wpis dodano o 15:02 ---------- Poprzedni wpis dodano o 14:55 ----------

Teraz pasuje sprawic by cos sie dzialo np wyskakiwal alert po kliklnieciu

#18 _krzysiek

_krzysiek
  • 1 971 postów
  • SkądŁódź

Napisano 07 czerwca 2010 - 14:34

Alerts

#19 Zuki

Zuki
  • 434 postów
  • SkądPrzeworsk

Napisano 07 czerwca 2010 - 15:36

samo stworzenie alertu nie stanowi problemu :) problem jest

if(NO WLASNIE CO?){
UIAlertView *simpleAlert = [[UIAlertView alloc] initWithTitle:@"Test" message:@"Trafiles" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK",nil];
		[simpleAlert show];
		[simpleAlert release];
}
Jaka wartosc jest przy wykruciu dotkniecia wielokata?

#20 _krzysiek

_krzysiek
  • 1 971 postów
  • SkądŁódź

Napisano 07 czerwca 2010 - 16:22

Zuki, widać, że robimy program za Ciebie, także to moje ostatnie instrukcje.
Wielokąt numer 1:
punkty: (61,200) , (135,114), (110,350) , (63,275) - uwzględniając białe tło dookoła tego obrazka http://img339.images.../ilustracja.png

Tworzysz więc klasę Collission dodając te 4 punkty

metodą touchesBegan lub touchesEnded sprawdzasz współrzędne dotyku

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
	UITouch *touch = [touches anyObject];
	CGPoint currentTouch;
	currentTouch = [touch locationInView:self.view]; (lub [touch locationInView:obrazek] gdzie obrazek ma userInteractionEnabled = YES
	float xAxis = currentTouch.x;
	float yAxis = currentTouch.y;

	if ([wielokat1 collision:xAxis:yAxis]) ... 
}

EOT jeżeli chodzi o mnie




Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych