Toon posts:

[JAVA]IndexArrayOutOfBounds Exeption???

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedendag Tweakers en Tweakerinnen,

Voor een project zijn we bezig met een grid gebaseerd spel. Het probleem waar we tegenaangelopen zijn is dat er bij het sidescrollen zich een gods irritante fout voordoet, namenlijk: Als we naar boven/links/recht scrollen gaat alles perfect maar wanner het spel naar beneden scrolt krijgen we een heerlijke IndexArray Out of bounds Exeption. Wij hoopten dat jullie mischien iets weten om dit te verklaren want wij komen er niet meer uit :(

Met vriendelijke groeten!


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
@Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int xScrStart = 0;
        int xScrEnd = FiSt.X_TILES_TO_DRAW;
        int yScrStart = FiSt.Y_TILES_TO_DRAW;
        int yScrEnd = FiSt.Y_TILES_TO_DRAW * 2;

        if (player != null) {
            if ((player.getBotX() > playerLeftMargin)
                    && (player.getBotX() < gridModel.getXTiles()
                            - playerRightMargin)) {
                xScrStart = player.getBotX() - playerLeftMargin;
                xScrEnd = player.getBotX() + playerRightMargin;
            } else if (player.getBotX() >= gridModel.getXTiles()
                    - playerRightMargin) {
                xScrStart = gridModel.getXTiles() - FiSt.X_TILES_TO_DRAW;
                xScrEnd = gridModel.getXTiles();
            }
            if ((player.getBotY() > playerTopMargin)
                    && (player.getBotY() < gridModel.getXTiles()
                            - playerBotMargin)) {
                yScrStart = player.getBotY() - playerTopMargin;
                yScrEnd = player.getBotY() + playerBotMargin;
            } else if (player.getBotY() <= playerTopMargin) {
                yScrStart = 0;
                yScrEnd = FiSt.Y_TILES_TO_DRAW;
            } else if (player.getBotY() >= gridModel.getYTiles()
                    - playerBotMargin) {
                yScrStart = gridModel.getYTiles() - FiSt.Y_TILES_TO_DRAW;
                yScrEnd = gridModel.getYTiles();
            }
        }
        if (gridModel != null) {
            for (int x = xScrStart; x < xScrEnd; x++) {
                for (int y = yScrStart; y < yScrEnd; y++) {

                    if (gridModel.getTile(x, y) >= 0) {
                        canvas.drawBitmap(bitmapArray[gridModel.getTile(x, y)],
                                (xOffset / 2) + (x - xScrStart) * tileSize,
                                (yOffset / 2) + (y - yScrStart) * tileSize,
                                paint);
                    }
                }
            }
        }

Acties:
  • 0 Henk 'm!

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
Een ArrayIndexOutOfBounds exception word gegooid als je een buiten de grootte van de array een element probeert aan te spreken.
Op basis van je huidige beknopte code kunnen we niet zien waar deze vandaan komt, je hebt zelf niet eens een stacktrace geplaatst.

Hint:
Volg je stacktrace, kijk waar je indexoutofboundsexception optreed en kijk waarom dit gebeurt! (Debuggen is niet heel lastig hoor). Zet bijvoorbeeld een extra check of je array wel deze index bevat, maar belangrijker is om te weten waarom je die index nodig zou hebben, want klaarblijkelijk spreek je een index aan die er toch niet is. Moet je array dan groter worden of heb je een andere index nodig?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank je voor het antwoord, we hebben al geprobeerd dit te debuggen maar hij klapt er al uit voordat hij bij de Array komt waar hij de fout op geeft.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ow ... mijn project maat heeft zojuist het probleem opgelost. In regel 22 werden de verkeerde variabelen met elkaar vergeleken.
@ Enfer: Bedankt voor de moeite!