|
2D-программирование Вопросы, касающиеся двумерного программирования |
08.02.2012, 18:27
|
#1
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Flight
Эта игра будет из себя представлять что-то на подобие gta1-2. Делается она в в blitz 3D(но сама игра 2D). Линии квестов ещё не существует. Проекту очень нужны програмисты и художники.
Управление WASD и стрелочки.
вот код игры
Graphics 1366,768,32,1
SetBuffer BackBuffer()
Global x=100
Global y=100
Global speed=3
Global zdorov=100
Global speedc=5
Global cursor=LoadImage("cursor.bmp")
Global polosa=LoadImage("polosa.bmp")
Global Endd=LoadImage("end.bmp")
Global player=LoadImage("1.bmp")
Global ground=LoadImage ("ground1.bmp")
Global house1=LoadImage ("house1.bmp")
Global bot=LoadImage("bot.bmp")
Global car=LoadImage("car1.bmp")
Global cy=Rand(1366)
MaskImage player,0,0,10
TileImage ground,0,0,0
Function updateplayer()
DrawImage player,x,y
MidHandle player
DrawImage player,x,y
DrawImage ground,0,0
DrawImage house1,300,400
DrawImage car,555,cy
f=LoadFont ("courier",40,False,False,False)
MaskImage cursor,255,255,255
px=x+speed*deltax
py=y+speed*deltay
DrawImage player,x,y
If x<0 Then x = 1366
If x>1366 Then x = 0
If y<0 Then y = 768
If y>768 Then y = 0
cursorX=MouseX()
cursorY=MouseY()
DrawImage cursor,MouseX(),MouseY()
If KeyDown(200) Or KeyDown(17) Then
y=y-speed
DrawImage player,x,y
EndIf
If KeyDown(208) Or KeyDown(31)
y=y+speed
DrawImage player,x,y
EndIf
If KeyDown(203) Or KeyDown(30)
x=x-speed
DrawImage player,x,y
EndIf
If KeyDown(205) Or KeyDown(32)
x=x+speed
DrawImage player,x,y
EndIf
SetFont f
Color 255,0,0
Text 10,10,"health = "+ zdorov
;If x=332 Or x=300 Or y=400 Or y=432 Then speed=0
If ImagesCollide(player,x,y,0,car,555,cy,0) Then zdorov=zdorov-4
If zdorov<0 Then DrawImage endd,0,0
End Function
While Not KeyDown(1)
updateplayer()
Flip
Cls
DrawImage polosa,538,83
If 1=1 Then cy=cy+speedc
If cy<0 Then cy = 768
If cy>768 Then cy = 0
If ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc=1
If Not ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc=5
Wend
End
Очень бы хотелось сделать векторное передвижение. Кто может, помогите(желательно на примере этой программы).
Последний раз редактировалось SBJoker, 08.02.2012 в 19:52.
|
(Offline)
|
|
08.02.2012, 18:39
|
#2
|
ПроЭктировщик
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений (для 63 пользователей)
|
Ответ: Flight
player_angle=atan2(mousex()-playerx,mousey()-playery)
playerx=playerx+cos(player_angle)
playery=playery+sin(player_angle)
вот вроде без ошибок должно быть дальше думаю сам докуришь
и кстати рисовать плеера я думаю надо только один раз
Graphics 1366,768,32,1
SetBuffer BackBuffer()
Global x=100
Global y=100
Global speed=3
Global zdorov=100
Global speedc=5
Global cursor=LoadImage("cursor.bmp")
Global polosa=LoadImage("polosa.bmp")
Global Endd=LoadImage("end.bmp")
Global player=LoadImage("1.bmp")
Global ground=LoadImage ("ground1.bmp")
Global house1=LoadImage ("house1.bmp")
Global bot=LoadImage("bot.bmp")
Global car=LoadImage("car1.bmp")
Global cy=Rand(1366)
MaskImage player,0,0,10
TileImage ground,0,0,0
Function updateplayer()
DrawImage player,x,y
MidHandle player
DrawImage player,x,y
DrawImage ground,0,0
DrawImage house1,300,400
DrawImage car,555,cy
f=LoadFont ("courier",40,False,False,False)
MaskImage cursor,255,255,255
px=x+speed*deltax
py=y+speed*deltay
DrawImage player,x,y
If x<0 Then x = 1366
If x>1366 Then x = 0
If y<0 Then y = 768
If y>768 Then y = 0
cursorX=MouseX()
cursorY=MouseY()
DrawImage cursor,MouseX(),MouseY()
If KeyDown(200) Or KeyDown(17) Then
y=y-speed
DrawImage player,x,y
EndIf
If KeyDown(208) Or KeyDown(31)
y=y+speed
DrawImage player,x,y
EndIf
If KeyDown(203) Or KeyDown(30)
x=x-speed
DrawImage player,x,y
EndIf
If KeyDown(205) Or KeyDown(32)
x=x+speed
DrawImage player,x,y
EndIf
SetFont f
Color 255,0,0
Text 10,10,"health = "+ zdorov
;If x=332 Or x=300 Or y=400 Or y=432 Then speed=0
If ImagesCollide(player,x,y,0,car,555,cy,0) Then zdorov=zdorov-4
If zdorov<0 Then DrawImage endd,0,0
End Function
While Not KeyDown(1)
updateplayer()
Flip
Cls
DrawImage polosa,538,83
If 1=1 Then cy=cy+speedc
If cy<0 Then cy = 768
If cy>768 Then cy = 0
If ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc=1
If Not ImagesCollide(polosa,538,86,0,car,555,cy,0) Then speedc=5
Wend
End
красным выделено то что не нужно т.к есть то ,что выделено зеленым
__________________
форум эт вещь... и почему я раньше им не пользовался?
AMD Phenom(tm) II X6 3.20GHz 8GB GTX 550(1Gb)
|
(Offline)
|
|
08.02.2012, 18:59
|
#3
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Я раньше не создавал тему
А как векторное перемещение сделать?(на примере)
|
(Offline)
|
|
08.02.2012, 19:49
|
#4
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
код от Spy4433 не имеет смысла. Человек за мышкой двигаться не должен.
|
(Offline)
|
|
08.02.2012, 20:21
|
#5
|
ПроЭктировщик
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений (для 63 пользователей)
|
Ответ: Flight
ну код от spy4433 имеет смысл т.к направление задается по углу
осталось только пошевелить "МОЗГОМ",а как будешь задавать этот угл неважно от мыши или от клавиш, а может от джостика
я так полагаю в итоге должно получится управление как в crimsonland?
if keyhit(UP) then
speedy#=-1
endif
playery#=playery#+speedy#
speedy=speedy*0.99
__________________
форум эт вещь... и почему я раньше им не пользовался?
AMD Phenom(tm) II X6 3.20GHz 8GB GTX 550(1Gb)
|
(Offline)
|
|
08.02.2012, 20:42
|
#6
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
в итоге должно получится совсем не так. Нажал вверх, идет вверх, нажал влево, идет влево. Так что угл вообще никого не волнует. Ему векторное перемещение сделать надо.
|
(Offline)
|
|
08.02.2012, 21:24
|
#7
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
А как сделать так, чтобы гг поворачивался за курсором, но шел на wasd?
|
(Offline)
|
|
08.02.2012, 21:26
|
#8
|
ПроЭктировщик
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений (для 63 пользователей)
|
Ответ: Flight
картинку крутить но это тормзно!
можно сделать так
dim player(359)
for t=0 to 259
player(t)=loadimage("player.bmp")
rotateimage player(t),t
next
drawimage player(playerangl),playerx,playery
__________________
форум эт вещь... и почему я раньше им не пользовался?
AMD Phenom(tm) II X6 3.20GHz 8GB GTX 550(1Gb)
|
(Offline)
|
|
08.02.2012, 21:33
|
#9
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
Тогда будет просто одна картинка ворочаться? И как это прицепить к курсору?
|
(Offline)
|
|
08.02.2012, 21:34
|
#10
|
ПроЭктировщик
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений (для 63 пользователей)
|
Ответ: Flight
что бы узнать угл я писал выше
player_angle=atan2(mousex()-playerx,mousey()-playery)
__________________
форум эт вещь... и почему я раньше им не пользовался?
AMD Phenom(tm) II X6 3.20GHz 8GB GTX 550(1Gb)
|
(Offline)
|
|
08.02.2012, 21:47
|
#11
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
Способ логичный, но плохо подходит к применению. Тут вся фишка в MaskImage. Дело в том, что она и так не очень хорошо маскирует цвета в сложных фигурах, а если еще и повернута картинка на 1 градус, то и вовсе кошмар будет. Я сам так делал, правда с у меня на 45 градусов, и вокруг главного героя была незакрашеная территория. Я это пофиксил тем, что маску поставил похожу на задний фон, но тебе это вряд ли подойдет.
Но тебе это еще рано, ты бы векторное перемещение сделал, для начала. И даешь людям демку с блэкджеком и шлюхами!
|
(Offline)
|
|
08.02.2012, 22:22
|
#12
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
В общем я завтра попробую сделать демку. С нормальным перемещением.
|
(Offline)
|
|
08.02.2012, 23:03
|
#13
|
Бывалый
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений (для 275 пользователей)
|
Ответ: Flight
А шлюхи и блэкджек уже есть?
И можно ли код в оффтоп поставить? Уж больно он места много занимает, мотать не удобно страницу.
|
(Offline)
|
|
08.02.2012, 23:28
|
#14
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,362
Написано 2,474 полезных сообщений (для 6,860 пользователей)
|
Ответ: Flight
Так, ребята, этому в проектах не место.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
|
|
08.02.2012, 23:43
|
#15
|
Нуждающийся
Регистрация: 05.02.2012
Сообщений: 57
Написано 2 полезных сообщений (для 4 пользователей)
|
Ответ: Flight
Почему?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:42.
|