Logiskt fail, behöver hjälp med att se hjärnspöket

Permalänk

Logiskt fail, behöver hjälp med att se hjärnspöket

var compared = new Array(); for (i = 1; i < test.length; i++) { var tempY = 10; var tempX = 10; compared.push(test[i]); for(j=i; j>0 ; j--){ if(j < i){ if((tempX + parseInt(test[i].width)) < 480){ tempX = tempX + parseInt(test[j].width) + 10; } else { compared.sort(); tempY = tempY + parseInt(compared[0].height) + 10; tempX = 10; compared = []; } } } }

Koden här bör ge ett resultat så länge tempX och test[i].width är lägre än 480 och bara ge det andra resultatet en gång, återställa tempX och ge tempY ett nytt värde baserat på den kortaste test[x].height som postats hittils.

Vad koden gör är att så fort värdet överstigit 480, så återställs tempX, men arrayen compared försvinner helt och else-satsen triggas varje gång efter det.

Vidare så har test-arrayen olika objekt med olika värden på både width och height och denna loop är menad att ha ett fast y-värde (det är position y, inte höjd), dock ger den olika y för varje typ i test-arrayen. Bonuspoäng till den som kan komma på varför denna bit kod reagerar på det också.

ecempel på hur arrayen test fylls:

test[0] = [{ x: 0, y: 0, heigth: 50, width: 75 }] test[0] = [{ x: 0, y: 0, heigth: 143, width: 68 }]

Visa signatur

Stationär: Processor: Intel i5 3.2GHz, RAM: 4Gb, Grafikkort: ATI Radeon HD 5850, OS: Windows 7 Proffessional x64
Laptop: ASUS K53E, Processor: Intel i5 2450M, RAM: 4Gb, Grafik: Integrerad Intel GMA HD, OS: Win7 Home Premium x64 och Xubuntu 10

Permalänk
Medlem

Hänger inte med riktigt, kan du förklara lite mer övergripande vad koden är till för, och vad för slutresultat du vill ha?

Permalänk

Jag har kommit längre, jag vet vad det är för fel (compare.push() repeteras en gång för varje körning av loopen och jag hade skrivit lite udda).

Målet är att bilderna du hjälpte mig med i den förra tråden skall hamna sida vid sida, med toppen i samma höjd, oavsett hur höga eller breda de är. De får inte hamna utanför, därför måste en ny rad skapas om nästa bild som skall läggas ut skulle hamnat utanför.

Dessa saker är inga problem, problemet dyker upp när compare skall fyllas och man får fler än två rader. På rad två kollar den även de gamla värdena, detta löste jag genom att sätta i till antalet bilder som redan är ute vid radbytet.

nu måste jag få reda på hur jag kan få compare att inte pusha om objektet redan ligger i compare. indexOf funkade inte så bra med objekt, det funkar ju bara med värden, så jag försökte jobba runt det med ID't på lagret i objektet (som vi diskuterade i förra tråden).

så här ser den nya koden ut:

var compared = new Array(); for (i = tempI; i < test.length; i++) { var tempY = marginTop; var tempX = marginLeft; for(j=i; j>0 ; j--){ if(j < i){ if((tempX + parseInt(test[i].width)) < (stage.width - (marginLeft + marginRight))){ tempX = tempX + parseInt(test[j].width) + innerMargin; if(!compared[i].id.indexOf(i)){ //<- detta funkar ju inte, då compared inte är "i" lång förrän efter första pushen och compare()-metod finns inte som standard i jscript compared.push(test[i]); } } else { compared.sort(); tempY = tempY + parseInt(compared[0].height) + innerMargin; tempX = marginLeft; tempI = compared.length; //<- Min fina haxx för att få rätt på i-loopen :D compared = []; } } } test[i].x = tempX; test[i].y = tempY; }

Visa signatur

Stationär: Processor: Intel i5 3.2GHz, RAM: 4Gb, Grafikkort: ATI Radeon HD 5850, OS: Windows 7 Proffessional x64
Laptop: ASUS K53E, Processor: Intel i5 2450M, RAM: 4Gb, Grafik: Integrerad Intel GMA HD, OS: Win7 Home Premium x64 och Xubuntu 10

Permalänk

Löste den biten, men är tillbaka på förra problemet: tempI blir 1 två tryck efter radbytet och else-satsen triggas varje runda >.<

Visa signatur

Stationär: Processor: Intel i5 3.2GHz, RAM: 4Gb, Grafikkort: ATI Radeon HD 5850, OS: Windows 7 Proffessional x64
Laptop: ASUS K53E, Processor: Intel i5 2450M, RAM: 4Gb, Grafik: Integrerad Intel GMA HD, OS: Win7 Home Premium x64 och Xubuntu 10

Permalänk
Medlem

Ditt fina haxx verkar inte göra någonting.

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Glömde ett +-tecken >.< Den gör något första rundan, men sen gör den inget mer... Dessutom måste j<0 i for-satsen ändras till något annat, men ändrar jag till j<tempI eller tempI-1 så flippar allt ur...
tempI är alltså en global variabel, initierad med startvärdet (i mitt fall 1, eftersom test[0] är bakgrunden).

Visa signatur

Stationär: Processor: Intel i5 3.2GHz, RAM: 4Gb, Grafikkort: ATI Radeon HD 5850, OS: Windows 7 Proffessional x64
Laptop: ASUS K53E, Processor: Intel i5 2450M, RAM: 4Gb, Grafik: Integrerad Intel GMA HD, OS: Win7 Home Premium x64 och Xubuntu 10

Permalänk

HA! Löste det också!
tempY var tvungen att ligga som global variabel!

Visa signatur

Stationär: Processor: Intel i5 3.2GHz, RAM: 4Gb, Grafikkort: ATI Radeon HD 5850, OS: Windows 7 Proffessional x64
Laptop: ASUS K53E, Processor: Intel i5 2450M, RAM: 4Gb, Grafik: Integrerad Intel GMA HD, OS: Win7 Home Premium x64 och Xubuntu 10

Permalänk

Nästa steg: Ta reda på hur man får den att inte lägga till den där sista, som bryter mot regeln i IF-satsen...

Visa signatur

Stationär: Processor: Intel i5 3.2GHz, RAM: 4Gb, Grafikkort: ATI Radeon HD 5850, OS: Windows 7 Proffessional x64
Laptop: ASUS K53E, Processor: Intel i5 2450M, RAM: 4Gb, Grafik: Integrerad Intel GMA HD, OS: Win7 Home Premium x64 och Xubuntu 10

Permalänk

Det finns ingen bra anledning att använda konstruktor istället för literal för att skapa en ny array i JavaScript. Istället för "new Array()", använd "[]".
Fattar inte vad du vill göra, du kan inte beskriva lite utförligare?
Känns som att det borde finnas en smidigare lösning.

Permalänk

Frågan är då hur jag fyller compared-arrayen innan det finns objekt att fylla den med.

Som jag sa, jag löste den delen och går nu vidare med att försöka få den att inte köra IF-satsen den sista gången, då bilden som ritas ut hamnar utanför ritytan.

Det jag håller på med är ett verktyg där man kan klicka på en bild i en sidoruta, så målas den ut på en rityta, sedan kan man dra den till den position man vill ha den.

Test-arrayen här är lite missledande, det är en array fylld med bild-objekten och den fylls i sin tur på varje gång man klickar på en bild.

Visa signatur

Stationär: Processor: Intel i5 3.2GHz, RAM: 4Gb, Grafikkort: ATI Radeon HD 5850, OS: Windows 7 Proffessional x64
Laptop: ASUS K53E, Processor: Intel i5 2450M, RAM: 4Gb, Grafik: Integrerad Intel GMA HD, OS: Win7 Home Premium x64 och Xubuntu 10