IPB

Witaj Gościu ( Zaloguj | Rejestruj )

> Uwaga!

Zanim zadasz pytanie:

1. Sprawdź czy odpowiedzi nie ma w dziale FAQ lub czy podobnego tematu nie było na forum
2. Zapoznaj się z polskim tłumaczeniem dokumentacji (help)
3. Zapoznaj się też z naszymi kursami i przykładami


Powtarzające się pytania będą karane ostrzeżeniami lub usuwaniem tematów !!!

Nigdy nie nazywaj tematu "Pomoc", "Help me!" itp. Tytuł tematu powinien być "mówiący" czyli taki, który od razu po przeczytaniu informuje o poruszanym w nim problemie.

PROSIMY PISAĆ CZY TEMAT DOTYCZY GameMaker 8.1, GameMaker:Studio LUB WCZEŚNIEJSZYCH!!!!

 
Reply to this topicStart new topic
Dostęp do tablicy w tablicy
hgter
post 11.02.2017 - 16:48
Post #1


Smart Newbie
*

Wiek: ?
Grupa: Użytkownicy
Postów: 72
Dołączył: 15.09.2014
Uploader
Ostrzeżenia:
(0%) -----


Witajcie

W gm mogę przechowywać tablicę w tablicy:

GML
t[0]=12
t[1]=13
t[2]=14

u[0]=45
u[1]=46
u[2]=47


q[0]=t
q[1]=u



Tylko jak potem odczytać zawartość?

Wszystko poniżej nie działa:

GML
//chcę odczytać wartość 12
w=q[0][0]
w=q[0].[0]
w=q[0[0]]


Czy jedyny sposób to:

GML
w=q[0]
a=w[0]


?

Go to the top of the page
 
+Quote Post
post 11.02.2017 - 16:48
Post #





Wiek:



Uploader


Pani kontekstowa pokazuje swe wdzięki tylko w Valhalli lub wszędzie jeżeli nie jesteś zalogowany(a)! :3
Go to the top of the page
 
Quote Post
Gibki Kaktus
post 11.02.2017 - 17:26
Post #2


Forum Infiltrator
*******

Wiek: 19 lat
Grupa: Użytkownicy
Postów: 799
Dołączył: 6.02.2011
Skąd: BP
Team: Dravisoft

gibkikaktus


Nagrody:
Najlepsza demo (CA 2015)

Uploader
Ostrzeżenia:
(0%) -----


Tak, to jedyny sposób, nie rozumiem co chciałeś osiągnąć tym, co nie działa u Ciebie...
A i btw:
GML
w=q[0]
a=w[0]

O ile tutaj w=q[0] podziała, to tyle a=w[0] już nie, ponieważ w nie jest tablicą.


--------------------
Projekty:
Go to the top of the page
 
+Quote Post
ediepl
post 11.02.2017 - 17:56
Post #3


Master of Forums
*********

Wiek: 21 lat
Grupa: Użytkownicy
Postów: 1,631
Dołączył: 21.01.2011
Skąd: Swarzędz

ediepl


Nagrody:
Najlepszy Silnik (CA 2012)

Uploader
Ostrzeżenia:
(0%) -----


Takie coś tylko na strukturach ds_
Go to the top of the page
 
+Quote Post
hgter
post 12.02.2017 - 1:39
Post #4


Smart Newbie
*

Wiek: ?
Grupa: Użytkownicy
Postów: 72
Dołączył: 15.09.2014
Uploader
Ostrzeżenia:
(0%) -----


CYTAT
Tak, to jedyny sposób, nie rozumiem co chciałeś osiągnąć tym, co nie działa u Ciebie...


No wiesz skoro gm pozwala przechowywać tablice w tablicach (a pozwala - w debugerze widać to dokładnie - w miejscu komórek 0 i 1 są tablice) to zakładałem, że jest bezpośrednia droga dostępu, analogicznie jak np. podczas przechowywania id obiektu w tablicy i odczytu jego zmiennych. Skoro pod q[0] tak naprawdę jest tablica, to odniesienia q[0[0]] i q[0][0] mogłyby być logiczne (tu drugie o ile się nie mylę działa np. w JavaScript w podobnej sytuacji). A gdy nie działały, użyłem metody dostępu takiej jak przy przechowywaniu id obiektu: q[0].[0]

Wynikało to z tego, że gm pozwala to zapętlić:

GML
t[0]=12
t[1]=13
t[2]=14

u[0]=45
u[1]=46
u[2]=47


q[0]=t
q[1]=u


t[3]=q ///O dziwo to nie daje błędu!</span>


Po tym mam tablicę t w tablicy q, która jest znowu w tablicy t i tak parę razy (nie w nieskończoność - około 4 razy). Czyli wygląda, że gdy damy tablicę w tablicy to przechowywane jest tylko odniesienie (bo się zapętla potem). Tym bardziej, że w debugerze przy tablicach jest kilku znakowy kod (nie wiem czy to id czy jakiś adres), który jest inny dla każdej utworzonej tablicy, ale przy takim "zapętleniu" tablice w niższych pętlach mają taki sam numer jak w wyższych. Stąd próba jak przy obiektach.


CYTAT
O ile tutaj w=q[0] podziała, to tyle a=w[0] już nie, ponieważ w nie jest tablicą.


Nie masz racji. To jak najbardziej działa. I po tym "w" staje się tablicą. I na końcu "a" ma wartość 12. Tyle, że chciałem prościej.
Go to the top of the page
 
+Quote Post
ediepl
post 12.02.2017 - 13:20
Post #5


Master of Forums
*********

Wiek: 21 lat
Grupa: Użytkownicy
Postów: 1,631
Dołączył: 21.01.2011
Skąd: Swarzędz

ediepl


Nagrody:
Najlepszy Silnik (CA 2012)

Uploader
Ostrzeżenia:
(0%) -----


CYTAT
Nie masz racji. To jak najbardziej działa. I po tym "w" staje się tablicą. I na końcu "a" ma wartość 12. Tyle, że chciałem prościej.
cooooo?
Chyba niezbyt rozumiesz kod który napisałeś, nie przekazujemy w ten sposób adresu tablicy tylko jej aktualna wartość, a "w" nie staje się tablicą
Go to the top of the page
 
+Quote Post
hgter
post 12.02.2017 - 14:11
Post #6


Smart Newbie
*

Wiek: ?
Grupa: Użytkownicy
Postów: 72
Dołączył: 15.09.2014
Uploader
Ostrzeżenia:
(0%) -----


CYTAT
cooooo?
Chyba niezbyt rozumiesz kod który napisałeś, nie przekazujemy w ten sposób adresu tablicy tylko jej aktualna wartość,


Tu masz oczywiście rację - jeżeli po wykonaniu w=q[0] zmienimy zawartość "w" to nie zmieni się "q". EDYCJA Okazało się to bardziej skomplikowane. Na końcu sam siebie poprawiam. EDYCJA

Choć całość dziwnie się zachowuje przy zapętleniu. Serio danie t[3]=q powinno wygenerować błąd albo po prostu przypisać aktualny stan "q" do t[3] a nie tworzyć samozapętloną tablicę. I ponadto "t[3]=q" tworzy zapętloną tablicę także w "q"! Czyli działa tak jakby jednak przechowywany był adres a nie same wartości. Bo zmieniam "t", ale zmiana pojawia się w "q" (w dodatku zapętlona). Co więcej jeżeli przed "t[3]=q" zrobię kopię tablicy "q" np. dając "tt=q" to po "t[3]=q" zapętlenie pojawi się także w kopii. A jeżeli po tym wszystkim dam t[0]=999999 to wartość 999999 pojawi się we wszystkich miejscach (czyli w t,q i tt). Jeżeli to nie jest przechowywanie adresu a nie wartości to nie wiem co jest. EDYCJA Na końcu postu udało mi się to w końcu zrozumieć. EDYCJA


CYTAT
a "w" nie staje się tablicą


Już druga osoba mi to pisze więc może się rzeczywiście mylę. Ale powiedzcie mi gdzie.

Wykonuję taki kod:
GML
t[0]=12
t[1]=13
t[2]=14

u[0]=45
u[1]=46
u[2]=47


q[0]=t
q[1]=u
q[2]=88
q[3]=99


Na końcu (patrzę w debugerze) mam zmienną q oznaczoną jako tablica, która po rozwinięciu w komórkach 0 i 1 ma tablice a w 2 i 3 wartości 88 i 99.


Potem robię


GML
w=q[0]
a=w[0]



I pojawia mi się zmienna "w" która jest opisana jako tablica (array) i zawiera 3 komórki (o wartościach 12 13 i 14), oraz zmienna "a" o wartości 12.

Dlaczego twierdzicie, że "w" nie jest tablicą?

EDYCJA:
Ale jak zmienię po wszystkim "t" to zmiana przeniesie się do "w". Natomiast wyzerowanie "t" już się nie przeniesie (podobnie jeżeli coś zmienie w "w"). Czyli rzeczywiście pierwotnie "w" nie jest tablicą tylko zawiera odniesienie do tablicy t (przechowywane w q[0]). Dopiero po zmianie jakiejś wartości w "w" albo usunięciu tablicy t tworzy się oddzielna kopia danych.

Muszę przyznać, że dowiedziałem się czegoś nowego. Myślałem, że jeżeli mam tablicę "x' i zrobię "y=x" to w "y" pojawi się kopia tablicy "x" a nie tylko odniesienie do "x". A wychodzi na to, że dopiero jakaś zmiana wykonana na "y" tworzy oddzielną kopię. I to nie jest do końca tak, że po y=x po prostu x i y zawierają odniesienie do miejsca w pamięci. Bo zmiana x zmieni też y, ale zmiana y nie zmieni x.

Teraz szukam o tym i znalazłem https://www.reddit.com/r/gamemaker/comments..._copying_works/

EDYCJA
Go to the top of the page
 
+Quote Post
ediepl
post 12.02.2017 - 17:57
Post #7


Master of Forums
*********

Wiek: 21 lat
Grupa: Użytkownicy
Postów: 1,631
Dołączył: 21.01.2011
Skąd: Swarzędz

ediepl


Nagrody:
Najlepszy Silnik (CA 2012)

Uploader
Ostrzeżenia:
(0%) -----


Mój błąd;) pomyliło mi się z C gdzie
int Tab[3] = { 12, 13, 14 };
int Zmienna = Tab;

Gdzie zieminna będzie zawierała pierwszy element Tab który nie zmieni się po zmianie wartości tablicy, dawno nie używałem Gm'a biggrin.gif

E: C w sumie też i nie jestem pewien czy zeczywiscie tak jest ;P
Go to the top of the page
 
+Quote Post
hgter
post 12.02.2017 - 18:15
Post #8


Smart Newbie
*

Wiek: ?
Grupa: Użytkownicy
Postów: 72
Dołączył: 15.09.2014
Uploader
Ostrzeżenia:
(0%) -----


CYTAT
Mój błąd;) pomyliło mi się z C gdzie
int Tab[3] = { 12, 13, 14 };
int Zmienna = Tab;

Gdzie zieminna będzie zawierała pierwszy element Tab który nie zmieni się po zmianie wartości tablicy, dawno nie używałem Gm'a biggrin.gif

E: C w sumie też i nie jestem pewien czy zeczywiscie tak jest ;P


Ech mam podobnie biggrin.gif Nawyki z innych języków czasem dają śmieszne efekty. Najbardziej brakuje mi operacji na macierzach z matlaba. Coś nie mogę się do ds_ przekonać choć na chłodno wyglądają na bardzo przydatne.

Ale walcząc z tym problemem teraz, przynajmniej nauczyłem się żeby bardzo uważać w gm z przypisywaniem tablic typu x=y. Można sobie zrobić cholerny problem masakrycznie trudny do znalezienia.





Go to the top of the page
 
+Quote Post
I am Lord
post 12.02.2017 - 19:12
Post #9


Trzymam Sword
Ikona grupy

Wiek: 27 lat
Grupa: Moderatorzy
Postów: 4,573
Dołączył: 16.12.2005
Skąd: Piła

Huder


Nagrody:
Mistrz Ligi24 (2013)

Uploader
Ostrzeżenia:
(0%) -----


Wydaje mi się że żeby nie kopiowało tablicy to trzeba użyć akcessora '@' ale w sumie to tego nie używałem i nie wiem jak to dokładnie działa więc tylko wspomnę tutaj że coś takiego istnieje: http://docs.yoyogames.com/source/dadiospic.../accessors.html


--------------------
Acziwment unloked
Ciekawsze moje gry:
Ukończone: NewtonPong Android
Nieukończone:Maze Strategy
Compostowe: DungeonMazeShooter, ScorchedTanks, Atargatis, RedvsBlue, Wspomnienia
Go to the top of the page
 
+Quote Post
gnysek
post 13.02.2017 - 9:53
Post #10


Emerytowany Admin
************

Wiek: 29 lat
Grupa: Użytkownicy
Postów: 9,043
Dołączył: 2.06.2004
Skąd: Banino / Trójmiasto
Team: Gear-Studio

gnysek


Nagrody:
Najbardziej pomocny uzytkownik (CA 2011)

Uploader
Ostrzeżenia:
(0%) -----


Pamiętajcie, że GMS2 pozwala na tablicę w tablicy. Bardzo mozliwe, że runner od GM1.4 też na to pozwala (nawet jeśli niektóre składnie GM zgłasza jako błędne), ponieważ runnery są współdzielone (ten od GMS1.4 prawdopodobnie obsługuje też layery...).


--------------------
GMCLAN NA FACEBOOKU: facebook.com/GMCLAN

Aktualne gry w PlayStation Plus

Obecne Projekty:
[||||||||||] Word Memo - 35%
[||||||||||] Digy Digy Dig - 30% [on hold]
[||||||||||] Almora Origins - 50%
Go to the top of the page
 
+Quote Post
hgter
post 13.02.2017 - 10:14
Post #11


Smart Newbie
*

Wiek: ?
Grupa: Użytkownicy
Postów: 72
Dołączył: 15.09.2014
Uploader
Ostrzeżenia:
(0%) -----


CYTAT
Pamiętajcie, że GMS2 pozwala na tablicę w tablicy. Bardzo mozliwe, że runner od GM1.4 też na to pozwala (nawet jeśli niektóre składnie GM zgłasza jako błędne), ponieważ runnery są współdzielone (ten od GMS1.4 prawdopodobnie obsługuje też layery...).


Dzięki za info. Rzeczywiście, za stroną New Functions List:

CYTAT
arrays can be nested inside arrays such as

var a = [1,2,[3,4]];


Ale nie mogę znaleźć tam informacji jak miałby wyglądać odczyt w takiej sytuacji. Jest może dostępna jakaś większa dokumentacja do gm2?

I całkiem z ciekawości: czy to jest tak, że w gm2 doszły tablice w tablicach czy po prostu doszła nowa możliwość ich inicjowania? Bo nie mogę w dokumentacji gm1 nic znaleźć.

Ponadto, skoro mówisz, że runner będzie ten sam, to czyli jeżeli udało się uzyskać dostęp do jakiejś nowych możliwości gm2 z poziomu gm1 (tak jak teoretycznie mi teraz z tymi tablicami w tablicach) to będą działać, ale nowe funkcje dostępne w gm2 nie będą możliwe do wywołania z poziomu gm1?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 użytkownik(ów) przegląda ten temat (1 gości i 0 anonimowych użytkowników)
0 Użytkownicy:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2017 - 21:43