forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Фокус на объекте (http://forum.boolean.name/showthread.php?t=18032)

Rashgild 27.03.2013 14:12

Фокус на объекте
 
Вложений: 1
Здравствуйте!

Прикрепил код (вместе с изображениями) в архиве

Существуют два изометрических тайла - синий (сама карта) и зеленый (персонаж)

Вопрос : как реализовать подобие фокуса камеры на зеленом персонаже. Реализовывал с помощью передвижения самой карты (т.е. сам зеленый не двигается, а двигается синяя плоскость), но потом решил, что в связи с этим будут и другие проблемы, как полная перерисовка объектов, находящихся на карте. Так как лучше сделать?

Reizel 27.03.2013 18:56

Ответ: Фокус на объекте
 
реквестирую бинарник.
+ я не понял вопрос. Фокус и слежение - разные вещи, м.б. вы о втором?)

Nikich 28.03.2013 00:32

Ответ: Фокус на объекте
 
Код:

Graphics 800,600
Global img1 = LoadImage("isoTiles/testGreen.png")
Global img2 = LoadImage("isoTiles/testBlue.png")
SetBlend ALPHABLEND
Global sx=300,sy=100 'стартовые координаты(откуда начинаю отрисовывать
Global stepx=sx, stepy =sy ' Шаг по Х и У , в начале == координатам 300 Х 100
Global cameraX,cameraY
While Not KeyDown(27) ' Главный цикл
Cls
drawingMap()

If KeyDown(KEY_RIGHT) Then  stepx :+10 ; stepy :+5 ;
If KeyDown(KEY_LEFT) Then stepx :-10 ; stepy :-5
If KeyDown(KEY_UP) Then stepx :+10 ; stepy :-5
If KeyDown(KEY_DOWN) Then stepx :-10 ; stepy :+5
If KeyDown(KEY_H) Then ShowTestData()

Flip(1)
Wend

Function IsoX(x,y)
rez = Int(((2*(y+cameraY)-(x+cameraX))/162))
Return rez
End Function

Function IsoY(x,y)
rez = Int((((x+cameraX)+2*(y+cameraY))/162))
Return rez
End Function


Function drawingMap()
cameraX=stepx-400
cameraY=stepy-300
For i=IsoX(800,0)-2 To IsoX(0,600)+1
        For j=IsoY(0,0)-2 To IsoY(800,600)+1
                        x=(j-i)*81-cameraX                                   
                        y=(i+j)*40-cameraY
            DrawImage img2 ,x,y
        Next
Next
DrawImage img1 ,stepx-41-cameraX,stepy-20-cameraY 'выводим "персонажа"
End Function




Function ShowTestData()
 mX =MouseX()
 my% =MouseY()
DrawText "position X = "+stepx, 1,1
DrawText "position Y = "+stepy, 1,20
DrawText "mouse X = "+mX , 1,40
DrawText "mouse Y = "+my , 1,60

EndFunction

Если делать передвижение игрока по тайлам, эффекта не будет, ведь все тайлы одинаковые.
Размеры тайлов я бы советовал вам изменить. Уж больно они кривые.

Rashgild 28.03.2013 01:40

Ответ: Фокус на объекте
 
Nikich, спасибо большое. Я еще сам конкретно не определился с целями, пока только начал изучать, смотрю, как реализовать ту или иную задумку. Следующим моим шагом будет переход персонажа в тайл, по которому был совершен клик мышкой, поэтому я думаю, что реализовать с передвижением по тайлам будет лучше.

Nikich 28.03.2013 01:54

Ответ: Фокус на объекте
 
Я бы посоветовал вам сделать генерацию мира прежде этого. Добавьте ещё тайл земли, к примеру, и пусть карта случайно генерируется.


Часовой пояс GMT +4, время: 10:09.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot