Skocz do zawartości

Kurs MAX Script - temat 2 - podsumowanie


Rekomendowane odpowiedzi

Napisano

Na poczatek moja wersja skryptu. W tym temacie chodzilo glownie o zapoznanie sie z interfejsem ale przy okazji wyniklo kilka innych ciekawych problemow.

 

utility teapot_util \"Teapot\"

(

local my_teapot

 

button create_teapot \"Create teapot\"

colorpicker teapot_color \"Teapot Color: \" color:[100,100,255] fieldwidth:50 title:\"Pick Teapot color\" align:#right enabled:false

spinner teapot_radius \"Teapot size: \" type:#float range:[0,200,30] fieldwidth:40 enabled:false align:#right

slider teapot_segments \"Segments\" type:#integer range:[1,20,5] enabled:false

group \"Teapot Parts\"

(

checkbox teapot_body \"Body\" checked:true across:2 enabled:false

checkbox teapot_handle \"Handle\" checked:true across:1 enabled:false

checkbox teapot_spout \"Spout\" checked:true across:2 enabled:false

checkbox teapot_lid \"Lid\" checked:false across:1 enabled:false

)

button delete_teapot \"Delete Teapot\"

 

on create_teapot pressed do

(

my_teapot = teapot()

my_teapot.wirecolor = teapot_color.color

my_teapot.radius = teapot_radius.value

my_teapot.segments = teapot_segments.value

my_teapot.body = teapot_body.checked

my_teapot.handle = teapot_handle.checked

my_teapot.spout = teapot_spout.checked

my_teapot.lid = teapot_lid.checked

 

teapot_color.enabled = true

teapot_radius.enabled = true

teapot_segments.enabled = true

teapot_body.enabled = true

teapot_handle.enabled = true

teapot_spout.enabled = true

teapot_lid.enabled = true

 

)

 

on teapot_color changed val do my_teapot.wirecolor = val

on teapot_radius changed val do my_teapot.radius = val

on teapot_segments changed val do my_teapot.segments = val

on teapot_body changed val do my_teapot.body = val

on teapot_handle changed val do my_teapot.handle = val

on teapot_spout changed val do my_teapot.spout = val

on teapot_lid changed val do my_teapot.lid = val

 

on delete_teapot pressed do

(

teapot_color.enabled = false

teapot_radius.enabled = false

teapot_segments.enabled = false

teapot_body.enabled = false

teapot_handle.enabled = false

teapot_spout.enabled = false

teapot_lid.enabled = false

 

delete my_teapot

)

 

)

 

Co nowego? Przedewszystkim elementy interfejsu. Moze krotkie omowienie na przykladzie spinnera.

 

spinner teapot_radius \"Teapot size: \" type:#float range:[0,200,30] fieldwidth:40 enabled:false align:#right

 

spinner - typ kontrolki (moze tez byc button, slider, checkbox itd)

teapot_radius - nazwa kontrolki przez ktora bedziemy sie potem do niej odwolywac. Odradzam uzywanie tu nazw typu spiner1 czy spiner2, kiedy jest ich kilkabardzo latwo wszystko pokrecic.

\"Teapot size: \" - tekst ktory pojawi sie przy spinerze w menu

type:#float - rodzaj liczb ktore beda wyswietlane w spinerze. Tutaj liczby rzeczywiste (pozatym sa tez #integer czyli liczby calkowite i #worldunits czyli maxowe unity)

range:[0,200,30] - zakres liczb wyswietalnych w okienku spinera [min,max,wartosc_domyslna]

fieldwidth:40 - szerokosc pola spinera

enabled:false - ta wlasciwosc okresla czy element bedzie wlaczony

align:#right - i na koniec wyrownanie do lewej

 

Jak pewnie zauwarzyliscie czesc parametrow, jak np. enabled czy align jest wspolna dla wszystkich elementow interfejsu. Z przydatniejszych warto wspomniec tez o offset ktory ustawia dokladnie konkretny element. Jesli nasz button jest za wysoko wystarczy dodac offset:[0,-10] aby przesunac go o 10 pikseli w dol. Innym przydatnym parametrem jest across ktory umozliwia ustawianie elementow obok siebie.

 

button guzik1 \"Opcja 1\"

button guzik2 \"Opcja 2\"

button guzik3 \"Opcja 3\"

 

Tak zdefiniowane przyciski beda umieszczone jeden pod drugim. Drobna modyfikacja pozwala umiescic je obok siebie.

 

button guzik1 \"Opcja 1\" across:3

button guzik2 \"Opcja 2\" across:2

button guzik3 \"Opcja 3\" across:1

  • Odpowiedzi 15
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

Autor: Bart

 

Utility czajnik \"Czajnik\"

(

local pot

label l1 \"\"

button tea \"Create Teapot\"

label l2 \"\"

colorpicker Pik \"Wire color:\" color:[0,0,255] enabled:false

label l3 \"\"

group \"Teapot parts\"

(

checkbox Body \"Body\" checked:true enabled:false

checkbox Handle \"Handle\" checked:true enabled:false

checkbox Spout \"Spout\" checked:true enabled:false

checkbox Lid \"Lid\" checked:true enabled:false

)

group \"Parameters\"

(

spinner Rad \"Radius \" range:[10,100,40]align:#left enabled:false

slider Seg \"Segments \" range:[4,20,6] type:#integer enabled:false

)

button del_pot \"Delete Teapot\" enabled:false

 

on Pik changed kolor do

(

pot.wirecolor = kolor

)

on Body changed arg do

(

pot.body=arg

)

on Handle changed arg do

(

pot.handle=arg

)

on Spout changed arg do

(

pot.spout=arg

)

on Lid changed arg do

(

pot.lid=arg

)

on tea pressed do

(

pot=teapot radius:40 segments:6

pot.wirecolor=[0,0,255]

tea.enabled=false

pik.enabled=true

Body.enabled=true

Handle.enabled=true

Spout.enabled=true

Lid.enabled=true

Rad.enabled=true

Seg.enabled=true

del_pot.enabled=true

)

on del_pot pressed do

(

select pot

delete selection

Body.checked=true -- ponowne zaznaczenie wszystkich checkboxow

Handle.checked=true

Spout.checked=true

Lid.checked=true

 

Pik.color=[0,0,255] -- ustawienie colorpikera na defoultowy

 

Rad.value=40 -- ustawienie spinnera i slidera na wart. defoultowe

Seg.value=6

 

tea.enabled=true

pik.enabled=false

Body.enabled=false

Handle.enabled=false

Spout.enabled=false

Lid.enabled=false

Rad.enabled=false

Seg.enabled=false

del_pot.enabled=false

 

)

on seg changed value do

(

pot.segs=Seg.value

)

on rad changed value do

(

pot.radius=Rad.value

)

 

)--End utility

 

W temacie chcialem zebyscie zmieniali parametry czajniczka w momencie zmieniania ustawien w interfejsie. Dla wiekszosci elementow interfejsu robi sie to w ten sam sposob.

 

on nazwa_elementu changed nowa_wartosc do

(

--jakis kod np.

jakis_parametr = nowa_wartosc

)

 

Zasada dzialania jest bardzo prosta. W monencie zmiany ustawienia, wartosci kontrolki wykonywany jest kod pomiedzy nawiasami a wlasnie wprowadzona wartosc jest umieszczana w zmiennej nowa_wartosc. Jesli naszym elementem jest spiner bedzie tam liczba, jesli colorpicker bedzie to kolor a jesli checkbox nowa_wartosc bedzie mogla byc true lub false. W przypadku buttona nic nie jest przekazywane, wykonywany jest jedynie kod.

 

Jedyne do czego moglbym sie \"przyczepic\" w tym skrypcie to sposob okreslenie parametrow czajniczka w momencie jego tworzenia. Eleganciej byloby zamiast

 

pot.wirecolor=[0,0,255]

 

pisac

 

pot.wirecolor = Pik.color

 

czyli od razu inicjalizowac wartoscia a interfejsu.

Napisano

Autor: Bartłomiej Cysewski

 

utility Bart \"Temat 2\"

(

--definicja elementów interfejsu

button b1 \"Stwórz\"

colorpicker b2 \"Kolor siatki\"

spinner b3 \"Rozmiar\" range:[1,100,25] type:#integer

slider b4 \"Szczegółowość siatki\" range:[3,20,4]

checkbox c1 \"Dziobek\"

checkbox c2 \"Pokrywka\"

checkbox c3 \"Uchwyt\"

checkbox c4 \"Korpus\"

button b5 \"Usuń\"

 

--tworzenie teapot\'a

on b1 pressed do

(

tea = teapot()

)

--zmiana koloru siatki

on b2 changed col do

(

tea.wirecolor = col

)

--zmiana rozmiaru teapot\'a

on b3 changed rad do

(

tea.radius = rad

)

--zmiana gęstości siatki

on b4 changed seg do

(

tea.segs = seg

)

--ukrycie dzióbka

on c1 changed a1 do

(

tea.spout = not tea.spout

)

--ukrycie pokrywki

on c2 changed a2 do

(

tea.lid = not tea.lid

)

--ukrycie uchwytu

on c3 changed a3 do

(

tea.handle = not tea.handle

)

--ukrycie korpusu

on c4 changed a4 do

(

tea.body = not tea.body

)

--usunięcie teapot\'a

on b5 pressed do

(

delete $teapot01

)

 

) --koniec utility

 

 

Tutaj pojawia sie problem ktory mialem z chyba polowa skryptow. Jesli spojrzycie na poprzedni skrypt zauwarzycie deklaracje w trzeciej linijce

 

local pot

 

Dzieki temu zmienna pot jest widoczna w calym skrypcie, natomiast tutaj zmienna tea czyli ta w ktorej przechowywany jest teapot jest widoczna tylko w zdarzeniu

 

on b1 pressed do

 

Efekt jest taki ze w momencie kiedy proboje zmienic jakis parametr script sie wywala bo w zdarzeniu np.

 

on c3 changed a3 do

(

tea.handle = not tea.handle

)

 

nie ma deklaracji tej zmiennej i nie jest ona tu znana.

 

Podejrzewam ze czesc z Was mogla pisac w maxie 3 gdzie wszystkie zmienne byly deklarowane domyslnie jako globalne i wtedy nie ma takiego problemu. Natomiast w maxie 4 i 5 zmienne domyslnie ustawiane sa na lokalne. Kiedy przesiadlem sie na maxa 4 nie wiedzialem o tym i mialem spore problemy bo nic mi nagle nie dzialalo.

 

Musze jeszcze wspomniec o kasowaniu teapota

 

on b5 pressed do

(

delete $teapot01

)

 

Jak widac odwolanie do obiektu nastepuje przez jego nazwe, moze to rodzic problemy jesli w scenie juz byl inny czajnik o takiej samej nazwie.

Napisano

Autor: BooM-Bel

 

utility bmb \"BooM-Bel\"

(

button tp \"czajniczek\" -- tworzenie czajniczka

colorpicker wctp \"kolor\" color:[125,125,125] enabled:false-- określenie koloru siatki

spinner rtp \"romiar\" range:[1,50,10] type:#integer enabled:false-- wielkość czajniczka

slider stp \"siatka\" range:[1,12,6] type:#integer enabled:false-- szczegółowość siatki

Group \"ukryj czesci dzbanka\" -- ukrywanie elementów

(

checkbox cb1 \"przykrywka\" enabled:false checked:true-- przykrywka

checkbox cb2 \"dziubek\" enabled:false checked:true-- dziubek

checkbox cb3 \"uszko\" enabled:false checked:true-- uszko

checkbox cb4 \"dzbanuszek\" enabled:false checked:true-- cały dzbanuszek

)

button ktp \"kasuj\" enabled:false-- kasowanie czajniczka

 

on tp pressed do --tworzenie dzbanka i udostępnianie pozostałych funkcjii

(

tpo = teapot radius:rtp.value

tpo.name = \"dzbanuszek\"

tpo.wirecolor = wctp.color

tpo.segs = stp.value

wctp.enabled=true

rtp.enabled=true

stp.enabled=true

cb1.enabled=true

cb2.enabled=true

cb3.enabled=true

cb4.enabled=true

ktp.enabled=true

)

 

on wctp changed new_col do -- określenie koloru siatki

(

tpo.wirecolor = wctp.color

)

 

on rtp changed value do-- wielkość czajniczka

(

tpo.radius=value

)

 

on stp changed value do-- szczegółowość siatki

(

tpo.segs=value

)

 

on cb1 changed false do-- ukrywanie przykrywka

(

tpo.lid=false

)

on cb1 changed true do-- pokazywanie przykrywka

(

tpo.lid=true

)

 

 

on cb2 changed false do-- ukrywanie dziubek

(

tpo.spout=false

)

on cb2 changed true do-- pokazywanie dziubek

(

tpo.spout=true

)

 

 

on cb3 changed false do-- ukrywanie uszka-

(

tpo.handle=false

)

on cb3 changed true do-- pokazywanie uszka

(

tpo.handle=true

)

 

 

on cb4 changed false do-- ukrywanie dzbanka

(

tpo.body=false

)

on cb4 changed true do-- pokazywanie dzbanka

(

tpo.body=true

)

 

on ktp pressed do --kasowanie dzbanka i ukrywanie pozostałych funkcjii

(

delete tpo

wctp.enabled=false

rtp.enabled=false

stp.enabled=false

cb1.enabled=false

cb2.enabled=false

cb3.enabled=false

cb4.enabled=false

ktp.enabled=false

)

)

 

Jedyny problem to brak deklaracji zmiennej o ktorej pisalem post wczesniej. Dajcie znac ktorej wersji maxa uzywacie, ja mam 5.0 i u mnie bez tej deklaracji niestety nie chodzilo.

Napisano

Autor: leander

 

utility czajnik \"Czajnik Manager v1.0\"

(

button stworz \"Stwórz\" align:#left across:2 tooltip:\"Stwórz czajnik\"

button skasuj \"Skasuj\" align:#right enabled:false tooltip:\"Skasuj czajnik\"

spinner rozmiar \"Rozmiar:\" range:[0,100,25] type:#float enabled:false

slider siatka \"Szczegolowosc siatki:\" range:[0,15,5] type:#integer enabled:false ticks:15

checkbox pokrywka \"Pokrywka\" enabled:false checked:true

checkbox dziobek \"Dzióbek\" enabled:false checked:true

checkbox uchwyt \"Uchwyt\" enabled:false checked:true

checkbox korpus \"Korpus\" enabled:false checked:true

 

on stworz pressed do

(

myCZAJNIK = teapot()

skasuj.enabled = true

rozmiar.enabled = true

siatka.enabled = true

pokrywka.enabled = true

dziobek.enabled = true

uchwyt.enabled = true

korpus.enabled = true

)

 

on rozmiar changed val do myCZAJNIK.radius = val

on siatka changed val do myCZAJNIK.segs = val

 

on pokrywka changed STATUS do

(

if STATUS == false then

myCZAJNIK.lid = false

else

myCZAJNIK.lid = true

)

 

on dziobek changed STATUS do

(

if STATUS == false then

myCZAJNIK.spout = false

else

myCZAJNIK.spout = true

)

 

on uchwyt changed STATUS do

(

if STATUS == false then

myCZAJNIK.handle = false

else

myCZAJNIK.handle = true

)

 

on korpus changed STATUS do

(

if STATUS == false then

myCZAJNIK.body = false

else

myCZAJNIK.body = true

)

 

 

on skasuj pressed do

(

delete(myCZAJNIK)

-- \"zerowanie\" zmniennych:

skasuj.enabled = false

rozmiar.enabled = false

siatka.enabled = false

rozmiar.value = 25

siatka.value = 5

 

pokrywka.enabled = false

dziobek.enabled = false

uchwyt.enabled = false

korpus.enabled = false

 

pokrywka.state = true

dziobek.state = true

uchwyt.state = true

korpus.state = true

)

 

)

 

Poza brakiem deklaracji zmiennej przechowujacej tepot wszystko OK.

Zwrocilem uwage na sposob ustawiania widocznosci poszczegolnych elementow czjniczka.

 

on korpus changed STATUS do

(

if STATUS == false then

myCZAJNIK.body = false

else

myCZAJNIK.body = true

)

 

Mozna duzo prosciej, przeciez w zmiennej STATUS jest juz potrzebna Ci wartosc.

 

on korpus changed STATUS do CZAJNIK.body = STATUS

Napisano

Autor: Sypo

 

utility skrypt \"Zadanko\"

(

local pot

rollout cre \"Create\"

(

group \"Temat 2\"

(

button tea \"Teapot\" width:45 height:20

button closet \"Close Teapot\" enabled:false offset:[1,5]

spinner rad \"Radius: \" range:[1,50,20] width:80 height:25 enabled:false offset:[23,25] type:#float

slider seg \"Segments: \" range:[4,32,12] enabled:false type:#integer

colorpicker kol \"Kolor: \" color:[77,110,141] width:80 height:20 enabled:false offset:[13,5]

)

 

group \"Fragmenty\"

(

checkbox bod \"Body\" checked:true enabled:false

checkbox han \"Handle\" checked:true enabled:false

checkbox spo \"Spout\" checked:true enabled:false

checkbox lid \"Lid\" checked:true enabled:false

)

 

 

on tea pressed do

(

pot = Teapot radius:20

pot.segs = seg.value

pot.wirecolor = kol.color

pot.name = \"Czaj\"

closet.enabled = not closet.enabled

rad.enabled = not rad.enabled

seg.enabled = not seg.enabled

kol.enabled = not kol.enabled

bod.enabled = not bod.enabled

han.enabled = not han.enabled

spo.enabled = not spo.enabled

lid.enabled = not lid.enabled

)

 

on closet pressed do

(

delete pot

closet.enabled = not closet.enabled

rad.value = 20

rad.enabled = not rad.enabled

seg.enabled = not seg.enabled

kol.enabled = not kol.enabled

bod.enabled = not bod.enabled

bod.checked = on

han.enabled = not han.enabled

han.checked = on

spo.enabled = not spo.enabled

spo.checked = on

lid.enabled = not lid.enabled

lid.checked = on

)

 

on rad changed value do

pot.radius=rad.value

 

on seg changed value do

pot.segs = seg.value

 

on kol changed new_col do

pot.wirecolor = kol.color

 

on bod changed new_checked do

pot.body = bod.checked

 

on han changed new_checked do

pot.handle = han.checked

 

on spo changed new_checked do

pot.spout = spo.checked

 

on lid changed new_checked do

pot.lid = lid.checked

)

 

 

on skrypt open do

(

addRollout cre

)

 

on skrypt close do

(

removeRollout cre

)

)

 

Wszystko w najlepszym porzadku. Zwroccie uwage na tworzenie wlasnego rolloutu i zdarzenia

 

on skrypt open do

on skrypt close do

 

ktore pozwalaja przygotowac sobie jakies dane i posprzatac po sobie gdy skrypt jest zamykany.

Napisano

Autor: VGTsXVII

utility opcje \"VGTsXVII_Teapot\"

(

global obiekt

 

button przycisk01 \"Create\"

 

colorpicker kolor \"Wire color:\" color:[255,255,255] align:#center enabled:false

on kolor changed new_col do selection.wirecolor = new_col

spinner wielkosc \"Wielkosc:\" range:[0,100,10] align:#center fieldwidth:25 type:#integer enabled:false

on wielkosc changed val do selection.radius = val

slider gestosc \"podzial:\" range:[1,32,4] ticks:16 align:#center enabled:false

on gestosc changed val do obiekt.segs = val

 

 

checkbox box1 \"pokrywka\" offset:[20,0] enabled:false checked:true

on box1 changed val do obiekt.lid=val

checkbox box2 \"dziobek\" offset:[20,0] enabled:false checked:true

on box2 changed val do obiekt.spout=val

checkbox box3 \"uchwyt\" offset:[20,0] enabled:false checked:true

on box3 changed val do obiekt.handle=val

checkbox box4 \"korpus\" offset:[20,0] enabled:false checked:true

on box4 changed val do obiekt.body=val

 

button przycisk02 \"Delete\" enabled:false

 

 

on przycisk01 pressed do

(

obiekt=teapot()

obiekt.wirecolor=[255,255,255]

obiekt.radius=10

obiekt.segs=4

select(obiekt)

kolor.enabled=true

wielkosc.enabled=true

gestosc.enabled=true

box1.enabled=true

box2.enabled=true

box3.enabled=true

box4.enabled=true

przycisk02.enabled=true

)

 

on przycisk02 pressed do

(

delete(obiekt)

kolor.color=[255,255,255]

kolor.enabled=false

wielkosc.value=10

wielkosc.enabled=false

gestosc.value=4

gestosc.enabled=false

box1.checked=true

box1.enabled=false

box2.checked=true

box2.enabled=false

box3.checked=true

box3.enabled=false

box4.checked=true

box4.enabled=false

przycisk02.enabled=false

)

 

Wszystko w porzadku. Tym razem obiekt zostal zadeklarowany jako globalny. Roznica polega na tym ze wtedy jest widziany tez przez inne skrypty, co pozwalaloby np. wymieniac im dane. Az sie prosi o jakies zadanie na ten temat :D

Napisano

Autor: Warui

 

utility czajnik_uti \"Czajnik (Kurs MAX Script 2)\"

(

button utwoz \"Utworz Czajnik\" enabled:true

group \"Parametry\"

(

colorpicker kolor \"Kolor:\" color:(random black white)

enabled:false align:#center width:90

spinner rozmiar \"Rozmiar:\" range:[0,100,20] type:#worldunits

fieldwidth:40 enabled:false align:#center

slider segmenty \"Segmantacja:\" range:[0,15,4] type:#integer

enabled:false align:#center

label lab1 \"Pokaz:\" align:#left enabled:false

checkbox pokrywka \"Pokrywka\" checked:true across:2 enabled:false

checkbox ucho \"Ucho\" checked:true offset:[10,0] enabled:false

checkbox dziobek \"Dziobek\" checked:true across:2 enabled:false

checkbox korpus \"Korpus\" checked:true offset:[10,0] enabled:false

)

button skasuj \"Skasuj Czajnik\" enabled:false

group \"O skrypcie\"

(

label lab2 \"\"Czajnik\" by Warui\"

label lab3 \"© 2003\"

)

 

rollout ustawienia \"Ustawienia\"

(

label lab4 \"Pozycja czajnika:\" align:#left

spinner x \"x:\" range:[-1000,1000,0] type:#worldunits

fieldwidth:40 align:#left across:3

spinner y \"y:\" range:[-1000,1000,0] type:#worldunits

fieldwidth:40 align:#center

spinner z \"z:\" range:[-1000,1000,0] type:#worldunits

fieldwidth:40 align:#right

button ok \"OK\" width:100

 

on ok pressed do

(

czajnik = teapot radius:20 segs:4

wirecolor:kolor.color pos:[x.value,y.value,z.value]

destroydialog ustawienia;

)

)

 

function zmien_dostepnosc =

(

utwoz.enabled = not utwoz.enabled

skasuj.enabled = not skasuj.enabled

kolor.enabled = not kolor.enabled

rozmiar.enabled = not rozmiar.enabled

segmenty.enabled = not segmenty.enabled

lab1.enabled = not lab1.enabled

pokrywka.enabled = not pokrywka.enabled

ucho.enabled = not ucho.enabled

dziobek.enabled = not dziobek.enabled

korpus.enabled = not korpus.enabled

)

 

on utwoz pressed do

(

zmien_dostepnosc()

createdialog ustawienia modal:true width:250

)

 

on skasuj pressed do

(

zmien_dostepnosc()

if(isvalidnode czajnik) then delete czajnik

-- resetujemy do ustawien poczatkowych

kolor.color = (random black white)

rozmiar.value = 20

segmenty.value = 4

pokrywka.checked = true

ucho.checked = true

dziobek.checked = true

korpus.checked = true

)

 

on kolor changed nowy_kolor do czajnik.wirecolor = nowy_kolor

on rozmiar changed nowy_rozmiar do czajnik.radius = nowy_rozmiar

on segmenty changed nowa_segmentacja do czajnik.segs = nowa_segmentacja

on pokrywka changed zmiana_pokrywki do czajnik.lid = zmiana_pokrywki

on ucho changed zmiana_ucha do czajnik.handle = zmiana_ucha

on dziobek changed zmiana_dziobka do czajnik.spout = zmiana_dziobka

on korpus changed zmiana_korpusu do czajnik.body = zmiana_korpusu

)

 

Chyba najciekawszy skrypt. Brak deklaracji zmiennej ale zwroccie uwage na dwie rzeczy:

- funkcje createdialog ktora powoduje wyswietlenie wczesniej zdefiniowanego rolloutu jako osobnego okienka

- sposob kasowania czajniczka

 

if(isvalidnode czajnik) then delete czajnik

 

Wlasciwie zawsze powinno sie tak robic. Funkcja IsValidNode sprawdza czy rzeczywiscie czajnik istnieje i dopiero wtedy mozliwe jest jego skasowanie. Bez tego zabezpieczenia skrypt wysypalby sie gdybym skasowal teapota klawiszem Del a potem probowal zrobic to jeszcze raz skryptem.

Napisano

I drugi temat za nami :)

 

Temat wydaje mi sie dosc prosty choc czesc osob twierdzila przeciwnie, moze to wyjasnia slabsza frekwencje. Musze dobrze przemyslec nastepny , tak zeby byl lepiej wywazony. Do piatku wrzuce go na forum.

 

Swoja droga ciekawe czy ustanowilem jakis rekord w dlugosci pojedynczego posta :)

 

Napisano

Rekordy długości to dopiero będą jak pojawią się jeszcze bardziej złożone zadanka. :D

 

Frekwencja nieco podupadła, ale oby wyjątkowo, bo ponownie od samych uczestników wychodzą nowe i całkiem ciekawe rzeczy.

W połączeniu z opisem ich działania daje to bardzo dobrze przyswajalną wiedzę.

 

Napisano

Oj aż mi się gęba ucieszyła jak zobaczyłem skrypt Warui :) W momencie kasowania teapot\'a na klawiaturze cały skrypt mi wariował a tu taka niespodzianka!! A ja już zacząłem z tego wszystkiego o callbackach czytać:)

 

 

 

Napisano

Faktycznie. Moj blad :(

Nastepnym razem postaram sie oceniac skrypty na bierzaco jak przychodza (oczywiscie u siebie lokalnie, nie na forum), a nie wszystko na koniec, wtedy nie bedzie takich wpadek.

 

Napisano

Świetna robota Adam to podsumowanie ...

 

Aby zwiększyć frekwencję postaram się zamieścić newsa na głównej stronie .... może to coś da :)

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności