webForumDet fria alternativet

Placera tecken på en viss position

Flash

25 svar · 569 visningar · startad av Web-Tor

Medlem sedan nov. 200013 890 inlägg
Frågan#1

Ponera följande:
Jag har en databas med tre kolumner:
• x_pos (t.ex 10)
• y_pos (t.ex 20)
• letter (t.ex A)

Nu vill jag hämta alla bokstäver i databasen och placera ut dom på "rätt" position i min flashfilm.

Går det? Kan man få lite hjälp på vägen? :)

(Jag kan det mest grundläggande i hur man hämtar variabler från en databas till en flashfil via ASP.)

Medlem sedan feb. 20002 612 inlägg
#2
Läser in variablerna...

_root.createTextField("myTextField",1,x_Pos,y_Pos,20,17.4);
myTextField.border = true;
myTextField.text = letter;

Man kan även ange färg, font m.m. för textfältet

Medlem sedan nov. 200013 890 inlägg
#3

Glömde säga att jag använder Flash 5 :r.

Nu har jag gjort klipp av bokstäverna och använder den här koden istället:

on (release) {
	loadVariablesNum ("sql.asp?action=GetData", 0, "POST");
	duplicateMovieClip(_root.K, "K1", 1)
	setProperty("K1", _x, Xpos);
	setProperty("K1", _y, Ypos);
}

Jag vet inte om det är rätt med det funkar - nästan. Det konstiga är att jag måste klicka påknappen två gånger får att K-klippet ska visas. Vad kan det vara som är fel då?

Hur gör jag för att skicka in en array till filmen för att sedan loopa igenom den och skriva ut klippet flera gånger?

Medlem sedan feb. 20002 612 inlägg
#4

Det beror nog på att filmen inte hinner att läsa in variablerna.
Om det går, försök att läsa in dom tidigare i filmen eller så får du använda dig av ett filmklipp som sköter om inläsningen m.m.

För att skapa en array så kan du göra så här.

Textfil, php eller vad som helst:
var0=Niclas&var1=Lisa&var2=Kalle&var3=Olle...

var i = 0;
varArray = [];
while (this["var" + i] != undefined) {
varArray = this["var" + i];
i++;
}

Medlem sedan feb. 20002 612 inlägg
#5

Koden ovan kanske inte funkar i Flash 5 då kan du göra så här i stället

minArray = new Array();
text = "niclas,lisa,janne,kalle,ola,jessica,jennifer,jeanette";
minArray = text.split(",");
trace(minArray);
Medlem sedan nov. 200013 890 inlägg
#6

Nu hänger jag inte med riktigt. Det finns inget sätt att skicka in en array i filmen eller?
Typ:

SQL = "SELECT * FROM test"
Set rs = Conn.Execute(SQL)

i = 0
Do Until rs.EOF
	XposArray(i) = rs("colX")
	YposArray(i) = rs("colY")
	rs.MoveNext
	i = i+1
Loop

Response.Write "Xpos=" & XposArray()
Response.Write "&Ypos=" & YposArray()

Om det inte går utan man måste skicka in en massa variabler så är jag itne riktigt med på hur man gör i filmen. Hur får man dom här att funka ihop?

//*** Min kod för att skiriva ut ett filmklipp
duplicateMovieClip(_root.K, "K1", 1)
setProperty("K1", _x, Xpos);
setProperty("K1", _y, Ypos);

//*** Array-koden
minArray = new Array();
text = "niclas,lisa,janne.kalle,ola,jessica,jennifer,jeanette";
minArray = text.split(",");
trace(minArray);
Medlem sedan feb. 20002 612 inlägg
#7

Nej, du kan inte skapa en array på serversidan och skicka den till flash utan arrayen måste skapas i flash.

Om det är Xpos och Ypos värden som du vill ha från servern så är det nog enklast att skapa två stycken arrayer
Från servern: xpos="12, 34, 56, 78, 90"&ypos="12, 34, 56, 78, 90"

xposArray = new Array();
yposArray = new Array();
xposArray = xpos.split(",");
yposArray = ypos.split(",");

//*** Min kod för att skiriva ut ett filmklipp
duplicateMovieClip(_root.K, "K1", 1)
setProperty("K1", _x, xposArray[0]);
setProperty("K1", _y, yposArray[0]);

Om jag har fattat dig rätt så borde det bli nått liknande.
Har inte testat koden ovan men den borde funka... :)

Medlem sedan nov. 200013 890 inlägg
#8

Tack så mycket!
Jag gjorde så här och det funkar fint.

on (release) {
	// *** Skapar nya klipp

	// *** Skapar nya arrayer
	LetterArray = new Array();
	Xarray = new Array();
	Yarray = new Array();

	// *** Delar på arrayen
	LetterArray = Letter.split(",");
	Xarray = Xpos.split(",");
	Yarray = Ypos.split(",");

	// Antal positioner i arrayen
	Length = LetterArray.length;

	i = 0;
	while (i < Length){
		duplicateMovieClip(_root.LetterArray[i], LetterArray[i]+i, i+1)
		setProperty(LetterArray[i]+i, _x, Xarray[i]);
		setProperty(LetterArray[i]+i, _y, Yarray[i]);
		i++; 
	}

}
Medlem sedan nov. 200013 890 inlägg
#9

Jag blir inte klok på detta!

När jag trycker på knappen "Visa alla A i databasen" så kört höljande kod:

on (release) {
	// *** Hämtar från databasen
	loadVariablesNum ("sql.asp?action=GetData&letter=A", 0);

	// *** Skapar nya arrayer
	Xarray = new Array();
	Yarray = new Array();

	// *** Delar på arrayen
	Xarray = Xpos.split(",");
	Yarray = Ypos.split(",");

	// Antal positioner i arrayen
	Length = Xarray.length;

	i = 0;
	while (i < Length){
		duplicateMovieClip(_root.A, "A"+i, i+1)
		setProperty("A"+i, _x, Xarray[i]);
		setProperty("A"+i, _y, Yarray[i]);
		i++; 
	}

}

Men jag måste tycka två gånger på knappen. Varför?

Medlem sedan feb. 20002 612 inlägg
#10

Problemet är nog det att flashen inte hinner att läsa in alla data innan resten av koden körs.
Skulle vara bättre om du hade ett filmklipp som sköter om inladdningen av variabler.

Om du i asp-filen lägger till en variabel i slutet av strängen,
typ så här:

Ypos=23,34,45,56,67,8&Xpos=345,234,56,67,78&klart=ja&

så kan du i filmklippet kolla så att variabeln klart är inläst, är den inläst är allt inläst :)
I frame 1:
stop();
I frame 2 i filmklippet
loadVariablesNum (_root.letters, 0);
frame 3:
if(klart=="ja"){
gotoAndPlay(5);
}
frame 4:
gotoAndPlay(_currentframe -1);

och i frame 5 så petar du in din kod för att skapa arrayen m.m.

Sen i knappen så har du
on (release) {
_root.loadMC.play();
letters = "sql.asp?action=GetData&letter=A";
}
Det skall nog funka, hoppas jag.. :)

Medlem sedan nov. 200013 890 inlägg
#11

Nu börjar det likna nåt! Tack för all hjälp så här långt. :)
Först hade jag problemet att jag inte kom ifrån frame 1 men då la jag in gotoAndPlay(2); i knappen och nu funkar det. MEN, det är fortfarande lite problem:

Filmen hittar ni här

Problem 1: Filmen hämtar rätt bokstäver vid varje klick med positionerna ligger ett steg efter? (Testa genom att klicka på A sedan på B två gånger)
Problem 2: När jag klickar på bokstaven C (finns ett i databasen) efter att jag klickat på A (finns två i databasen) så visas två bokstäver.

Ni kan ju själv se vad asp-filen som snackar med databasen returnerar till filmen här »

Databasen ser ut så här:

[b]colID colLetter colX colY[/b]
  1     A       20     20
  2     A       50     20
  3     B       400    20
  4     B       430    20
  5     C       250    250
Medlem sedan feb. 20002 612 inlägg
#12

Svårt att säga vad det är men det verkar som om nått ligger och spökar någonstans.
Gjorde en liten exempelfil som du kan ladda ner och kika på om du vill. Använder textfiler där i stället för databas men det är ju samma sak egentligen... :)

Medlem sedan nov. 200013 890 inlägg
#13

Underbart Lacket!
Ska kolla på din film... återkommer.

Medlem sedan nov. 200013 890 inlägg
#14

Nu har jag fått det att funka men när jag laddar upp filen till webbhotellet så är det fortfarande samma problem? Men det funkar lokalt?

Sedan blir det fel även i din film. Om du ändrar så att det bara finns ett C (eller nån av de andra bokstäverna) så märker du att det blir fel. Vad kan det vara?

Medlem sedan feb. 20002 612 inlägg
#15

Aj aj aj, det var inte bra....måste kolla på det när jag kommer hem...

Medlem sedan feb. 20002 612 inlägg
#16

Nu är den här uppdaterad och du kan kika på den här

Medlem sedan nov. 200013 890 inlägg
#17

I din film
• klicka på A (två A visas)
• klicka på B (två B visas)
• klicka på A igen (denna gång visas nia A)
:q

Medlem sedan feb. 20002 612 inlägg
#18

Nej, klickar på a visas två A, klickar på b visas 10 st B och vid klick på c visas 3 st C.
Kanske cachen som spökar, töm den och pröva igen. :)

Medlem sedan nov. 200013 890 inlägg
#19

Din film funkar när jag kör den lokalt men inte när jag kör filmen som du lagt upp på webbserver.
Det är samma fel med min film.

Medlem sedan feb. 20002 612 inlägg
#20

Ja, då vete tusan vad det är.
Om du tittar på den här så funkar det som det skall?
Om du laddar hem den så funkar det lokalt men inte om du laddar upp den på server?

261 ms totalt · 3 externa anrop · v20260731065814-full.aa8cfc83
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)