hell-o! проблемка следующая: есть 2d-скроллер, в кот-м бегает перец, уровень поделен на области равные в длину ширине экрана, т.е. каждый имеет длину SCREEN_WIDTH. при движении если перец находится не в крайних полуэкранах, то он отрисовывается в центре экрана по горизонтальной оси, а декорации уровня сдвигаются отн. него влево или вправо в зависимости от направления его текущего движения на величину его смещения. по достижении конечных левого или правого полуэкрана перец при движении далее в сторону уже смещается от середины экрана в сторону, т.е. тем самым достигается то, чтобы при нахождении перца в крайних экранах они далее отн. него не скроллились влево-вправо, а напротив перец приближался к ним постепенно. тут все ок. сейчас мне нужно определять х-координату перца в любой момент времени и с этим проблемка. крайние левый и правый полуэкраны подсчитать ниже в коде получается, а все оставшееся пространство нет, т.к. формула неверна. подскажите плиз, что должно быть в последней ветке оператора-if ? сейчас ф-ла работает если перец пробежал не более 1 экрана в длину, а далее косячит. я уже туплю чего-то, не соображу сразу. в любом случае подсчитанная x-координата перца должна лежать в отрезке [0,SCREEN_WIDTH]. Код (Text): if ( pos.x < 0 ) //самый крайний слева полуэкран { mapx = SCREEN_WIDTH/2 - abs(pos.x )/2; } else if ( pos.x > (SCREEN_WIDTH * totalScreens ) - SCREEN_WIDTH) ) //правый конец { //самый правый полуэкран mapx = SCREEN_WIDTH/2 + (_heroPos.x - SCREEN_WIDTH*(_heroPos.x/SCREEN_WIDTH) ) / 2; } else { //!!! //все оставшееся пространство (сейчас ф-ла неверна) mapx = (SCREEN_WIDTH/2 + pos.x ) % SCREEN_WIDTH; } спасибо всем, кто меня на верное решение наведет.
UbIvItS, знаю. но не могу тем не менее сообразить. уже играю все свободное время с параметрами.. когда длина левела равна 2 экранам, то все ок, в вышеприведенном if-е последнее присваивание верно, и все ок. но если 3 экрана и более в длину левел - уже неверный рез-т дает. Код (Text): mapx = (SCREEN_WIDTH/2 + _heroPos.x ) % SCREEN_WIDTH;
slow_at_work да, верно. cейчас решил вот так: Код (Text): if ( pos.x < 0 ) //самый крайний слева полуэкран { mapx = SCREEN_WIDTH/2 - abs(pos.x )/2; } else if ( pos.x > (SCREEN_WIDTH * totalScreens) - SCREEN_WIDTH) ) //правый конец { //самый правый полуэкран mapx = SCREEN_WIDTH/2 + (_heroPos.x - SCREEN_WIDTH*(_heroPos.x/SCREEN_WIDTH) ) / 2; } else { //!!! вот здесь исправлено if ( pos.x < SCREEN_WIDTH ) mapx = (SCREEN_WIDTH/2 + pos.x) % SCREEN_WIDTH; else mapx = (pos.x - SCREEN_WIDTH/2) % SCREEN_WIDTH; } но чисто интуитивно (иногда сам себе удивляешься), и пока я осмыслить эту строчку не могу, хотя все теперь стало работать как и требовалось!!!