Avatar billede blim Nybegynder
02. maj 2003 - 21:13 Der er 14 kommentarer og
1 løsning

Selvskiftende globals??!!

Hej derude,
ok.. lad os sige at vi har 100 knapper! Hver knap har sine egne globals... kan man ikke på en eller anden måde få knapperne til at genere globals?

eksempel :
=== KNAP 1 ===
global knap1
global Gknap1
global test1
global mass1

... hvad jeg så ville have at director skulle gøre for mig, er (vi forestiller os at hver knaps nummer også var spritenummeret) :

global knap & currentspritenum
global Gknap & currentspritenum
global test & currentspritenum
global mass & currentspritenum

- på den måde behøver jeg ikke kopier og sæt ind 100 gange :)
nogen forslag?
Avatar billede kr-data Nybegynder
02. maj 2003 - 22:34 #1
jeg er ikke 100% pct på hvad du mener, men for mig ser det ud som om du skal bruge er loop af en art
Avatar billede kanding Nybegynder
03. maj 2003 - 10:56 #2
Hvis du absolut vil have 100 globale varaibler kan du downloade et eksempel her: http://www.spritelab.dk/beta/default.htm. Find den sektion der starter med Dynamic Variable Declaration.

Men i dit tilfælde vil jeg foreslå at du lader hver knap tilmelde sig en handler med navn og nummer når de starter fx.

on beginSprite me
addToList(sprite(me.spriteNum).member.name, me.spriteNum)
end

og i et movieScript har du en handler der modtager tilmeldingerne

global gKnapListe

on startMovie
gKnapListe = [:]
end

on addToList navn, nr
gKnapListe.AddProp(navn, nr)
end

så vil du ende med en liste på 100 knapper der har navn og nummer på knappen

Jeg ved ikke hvad du skal referere til i din applikation, men ellers skriv noget mere, det kan være at jeg er på helt gale veje i forhold til hvad du vil have
Avatar billede blim Nybegynder
03. maj 2003 - 15:53 #3
Kanding jeg tror du er inde på det rigtige... jeg har set lidt på eksemplet, men forstod kun lidt over halvdelen. :)

Altså forestil dig du har 100 scripts, og på hver af dem skal der være "global knap1" og i næste "global knap2" osv
jeg ville bare finde en "automatiseret" metode ;)
men jeg skal lige studere dit eksempel nærmere... tak i øvrigt :D
Avatar billede kanding Nybegynder
03. maj 2003 - 22:25 #4
Du skal IKKE have 100 globale variabler, det bliver uoverskueligt for dig i længden.
Du behøver ikke globale variabler på knapperne. Lad hver knap selv gemme deres information i properties. Prøv at forklare hvad du gerne vil opnå så skal jeg give dig nogle hints.
Avatar billede blim Nybegynder
04. maj 2003 - 13:12 #5
Ok, det eksempel med knapperne gav jeg fordi den egentlige forklaring tog 100 år men nu prøver jeg :

Jeg har lavet et program til en netcafe som ønsker at styre alle deres computere fra en "server"-computer. Det er også lykkedes bl.a. med din hjælp her på eksperten kanding ;)

Men programmet er blevet meget mere avanceret end jeg troede... når jeg siger det mener jeg i funktioner.

Hver computer har mange forskellige ting at holde styr på, og det inkluderer dens tider. For at holde styr på tiden har jeg lavet et næsten 500-linjers langt script som hver indeholder 43 globals og 22 properties. grunden til de mange globals, er fordi andre scripts konstant skal "holde øje" med f.eks. "com11tid" global'en. Derfor er det strengt nødvendigt at have en milliard globals :(

ser du... hver computer har så 14 scripts. Det er virkelig en bitch at skulle sidde og kopier 14 scripts for hver ny computer der skal ind i programmet. Derfor ville jeg skide gerne have at den selv kunne "skabe" globale navne, sådan så at jeg med et enkelt on getPropertyDescriptionList kunne angive hvilke sprites der repræsenterede hvilke computere. På den måde kunne jeg nøjes med at lave 14 scripts og bruge dem på alle pcikon-sprites, istedet for at bruge 14 x 50 scripts til 50 pcikon-sprites.

håber at du kunne bruge det til noget? :)
Avatar billede blim Nybegynder
04. maj 2003 - 13:14 #6
ps. Når jeg overover skriver "...hver computer har så 14 scripts..." så er det fordi der er et script for tid, en for at tjekke reservation, en for hvor meget hver pc i netværket har tjent osv.
Avatar billede kanding Nybegynder
04. maj 2003 - 13:42 #7
Hmmm det lyder som om at projektet ikke har været defineret omhyggeligt nok fra starten. Som sagt du kan sagtens dynamisk lave nye globale vars, f.eks. (the globals)[#navn] = "John", men det afhjælper ikke direkte dit problem. Når du først er ude i at skulle copy/paste hver gang, så skal du rette mange steder når der er noget der skal rettes. Dette er en størrere snak end der er plads til her. Kort, gælder det om fra starten at definere hvad applikationen skal kunne og hvor meget der kan variere. Disse variationer bliver så typisk til parametre når der oprettes en ny kopi af et script. Alene det at du skriver at der er flere computere og der kommer flere til, skriger efter object baseret scripting, altså at du opretter et object som styrer en computer. Når der så kommer en ny computer så opretter du et nyt object. De ting som computerne er fælles om at tjekke, kan oprettes i en anden manager. Vi snakker om en løsning hvor de forskellige objekter kommunikere med hindanden. Det er en længere forklaring, som jeg ikke ved om du er inde i, men tro mig du kommer i længden ikke ude om det i størrere applikationer.

Nåh, det her er jo ikke så god support, men prøv det med the globals eller skriv tilbage. Jeg vil gerne introducere dig til OOP på privat basis, men det kunne måske være en ide at samle nogle stykker...;-)
Avatar billede blim Nybegynder
05. maj 2003 - 15:36 #8
Det er det her projekt der har gjort at jeg kan så meget som jeg kan idag :) Jeg startede med et program som tjekkede hvor lang tid der var gået (frame-baseret ... uha :D ) og er idag endt med at have udviklet programmet til at kunne næsten alt :) ... Kanding jeg fik ikke rigtig svar, men fik noget at gå ud fra. Du får pointene anyways som tak for ulejligheden ;)
Avatar billede kanding Nybegynder
05. maj 2003 - 15:42 #9
ok, tak, men svaret var jo om du kunne lave nye globale variabler under afvikling og det kan du med (the globals)[#navn] = "John" eller lign. Det virkede bare som om at det var en kompensation for at projektet var gået lidt forkert.
Har du downloadet eksemplet på: http://www.spritelab.dk/beta/default.htm ???
Avatar billede blim Nybegynder
05. maj 2003 - 15:44 #10
det virkede :D :D
(the globals)[symbol("com"&"11")] = "John"
Avatar billede kanding Nybegynder
05. maj 2003 - 15:45 #11
ellers lav de hglobale variabler om til propertyLister, der kan du let tilføje,slette og finde. f.eks.

gKnapListe = [:]
gKnapListe.addProp("Knap1", sprite(23))
gKnapListe.addProp("Knap2", sprite(24))
gKnapListe.deleteProp("Knap1")
put gKnapListe["Knap2"]
put gKnapListe.getPropAt(2)

osv.
Avatar billede blim Nybegynder
05. maj 2003 - 15:47 #12
ok, mere viden!
Jeg skal da prøve... ;) tak Kanding
Avatar billede kanding Nybegynder
05. maj 2003 - 16:17 #13
he he..never ends???
du kan konvertere tilbage til en streng med:
put string((the globals).getPropAt(1))

hvordan finder du så ud af at den er nummer 1??? Siden the globals ikke tillader getPos og getOne, så må du lave et loop.

Helt simpelt ser det sådan her ud:

on test
  ant = (the globals).count
  repeat with r = 1 to ant
    put (the globals)[r]
    put (the globals).getPropAt(r)
  end repeat
end

Så er det at du skal smide et parameter på for at kunne lede efter noget fx.

on findKnap hvilken
  ant = (the globals).count
  repeat with r = 1 to ant

    if (the globals)[r] = hvilken then
    return string((the globals).getPropAt(r))
    end if

  end repeat
return -1
end

så kan du kalde med: fundetKnap = findKnap("john") eller i messagevinduet

put findKnap("john")

nåh nu må det her spørgsmål efterhånde lukke ;-)
Avatar billede blim Nybegynder
05. maj 2003 - 21:50 #14
Du er jo total lingo-guru :D
Giver du personlig undervisning?? Altså mod betaling selvfølgelig...?
Avatar billede kanding Nybegynder
05. maj 2003 - 21:55 #15
ja. Som jeg skrev tidligere kunne det betale sig at samle et par stykker, men anyway, skriv til john@spritelab.dk, så kan vi tage det derfra... ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester