Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 23.07.2011, 19:04   #1
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
На весь экран - пропорции

Если сделать так:
Graphics 1024, 768, 32 
То вся картинка растягивается на весь экран, и, если монитор 1366x768, все получается сплющенным. Я бы хотел сделать так, чтоб если монитор широкоформатный, то по краям появлялись черные полоски, если наоборот, то полоски сверху, или вообще не появляются если пропорции монитора соответствуют 1024x768(например 1280×1024), в общем как у плееров реализовано. Кто нибудь знает как это сделать? Заранее благодарен...
(Offline)
 
Ответить с цитированием
Старый 23.07.2011, 19:41   #2
Tadeus
Троллота
 
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений
(для 1,772 пользователей)
Ответ: На весь экран - пропорции

http://forum.boolean.name/showthread.php?p=174690 ?
(Offline)
 
Ответить с цитированием
Старый 23.07.2011, 20:36   #3
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: На весь экран - пропорции

Да. Вопрос аналогичный. Однако вопрос остался открытым.
(Offline)
 
Ответить с цитированием
Старый 24.07.2011, 00:16   #4
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: На весь экран - пропорции

Сообщение от xmarat Посмотреть сообщение
Я бы хотел сделать так, чтоб если монитор широкоформатный, то по краям появлялись черные полоски, если наоборот, то полоски сверху, или вообще не появляются если пропорции монитора соответствуют 1024x768(например 1280×1024)
CameraViewport camera,x,y,width,height

Параметры

camera - указатель камеры
x - координата x верхнего левого угла окна ( области просмотра)
y - координата y верхнего левого угла окна
width - ширина окна
height - высота окна Описание

Устанавливает позицию области просмотра камеры и ее размер.
Область просмотра камеры - 2D-область экрана, в которой отображаются рассматриваемые камерой объекты.
Установки области просмотра камеры позволяют Вам получать эффекты нескольких окон с разным видом и зеркал.



найдено тут: help.boolean.name в разделе 3d
(Offline)
 
Ответить с цитированием
Старый 24.07.2011, 00:18   #5
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,374
Написано 2,478 полезных сообщений
(для 6,866 пользователей)
Ответ: На весь экран - пропорции

раздел BlitzMax!
юзать надо просто SetViewport
Формулу расчёта бери из данной ранее ссылки.
__________________
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)
 
Ответить с цитированием
Старый 24.07.2011, 00:29   #6
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: На весь экран - пропорции

А как узнать какое разрешение у монитора?
(Offline)
 
Ответить с цитированием
Старый 24.07.2011, 01:08   #7
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,374
Написано 2,478 полезных сообщений
(для 6,866 пользователей)
Ответ: На весь экран - пропорции

Extern "Win32"
    
Function GetSystemMetrics:Int(Axis:Int)
EndExtern
Local DesktopWidth
:Int = GetSystemMetrics(0)
Local DesktopHeight:Int = GetSystemMetrics(1)

Graphics(DesktopWidth,DesktopHeight) 
__________________
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)
 
Ответить с цитированием
Старый 24.07.2011, 01:21   #8
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: На весь экран - пропорции

Эмм... А нет другого способа определить, а то я на Linux'е. Blitzmax не захотел это компилировать...
(Offline)
 
Ответить с цитированием
Старый 24.07.2011, 01:35   #9
ffinder
Дэвелопер
 
Аватар для ffinder
 
Регистрация: 10.09.2007
Сообщений: 1,442
Написано 793 полезных сообщений
(для 1,460 пользователей)
Ответ: На весь экран - пропорции

на линухе кури мануал про xlib
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (24.07.2011)
Старый 24.07.2011, 05:05   #10
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,374
Написано 2,478 полезных сообщений
(для 6,866 пользователей)
Ответ: На весь экран - пропорции

Сообщение от ffinder Посмотреть сообщение
на линухе кури мануал про xlib
Опередил

Сообщение от xmarat Посмотреть сообщение
Эмм... А нет другого способа определить, а то я на Linux'е. Blitzmax не захотел это компилировать...
SuperStrict
Import 
"-lXrandr"
Import "screen.cpp"

Extern
    
Function GetScreenSize:Int(width:Int Var,height:Int Var) 
EndExtern

Local desktopWidth
:Int
Local desktopHeight
:Int

Local error
:Int = GetScreenSize(width, height) 
И собственно сишный сорс:
screen.cpp
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<X11/Xlib.h>
#include<X11/extensions/Xrandr.h>

extern "C" int GetScreenSize(int&,int&);  // Makes the function visable to other files

int GetScreenSize(int& width, int& height)
{

         
int num_sizes;
         
Rotation original_rotation;

         
Display *dpy = XOpenDisplay(NULL);
         
Window root = RootWindow(dpy, 0);
         
XRRScreenSize *xrrs = XRRSizes(dpy, 0, &num_sizes);
         
//
         //     GET CURRENT RESOLUTION AND FREQUENCY
         //
         
XRRScreenConfiguration *conf = XRRGetScreenInfo(dpy, root);
         
short original_rate = XRRConfigCurrentRate(conf);
         
SizeID original_size_id = XRRConfigCurrentConfiguration(conf, &original_rotation);

          
width = xrrs[original_size_id].width;
          
height = xrrs[original_size_id].height;
 
         
XCloseDisplay(dpy);
        return 
0; 
    } 
__________________
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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
xmarat (24.07.2011)
Старый 24.07.2011, 16:17   #11
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: На весь экран - пропорции

Спасибо огромное Randomize!!! Это то что нужно. Вопрос на будущее: при компиляции в windows, с этим(код ниже) будет аналогично?
Extern "Win32" 
    
Function GetSystemMetrics:Int(Axis:Int) 
EndExtern 
Local DesktopWidth
:Int = GetSystemMetrics(0) 
Local DesktopHeight:Int = GetSystemMetrics(1) 

Graphics(DesktopWidth,DesktopHeight) 
(Offline)
 
Ответить с цитированием
Старый 24.07.2011, 20:09   #12
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,374
Написано 2,478 полезных сообщений
(для 6,866 пользователей)
Ответ: На весь экран - пропорции

Есть директивы:
?Win32
 Код для Windows
?MacOs
 Код для макоси
?Linux
  Код для линукса
? 
__________________
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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
xmarat (25.07.2011)
Старый 25.07.2011, 11:09   #13
xmarat
Нуждающийся
 
Регистрация: 11.07.2011
Сообщений: 64
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: На весь экран - пропорции

Не знал что так можно. Полезная вещь, буду знать. А как можно узнать размер дисплея в MacOS?
__________________
OS: Ubuntu Linux 11.04
CPU: Intel® Core™ 2 Quad Q9000 (2.0GHz, 1066MHz, 6Mb)
RAM: DDR2 SODIMM 4096 Мб
Video: NVIDIA® GeForce® GT240M 1024 Мб
(Offline)
 
Ответить с цитированием
Старый 25.07.2011, 12:00   #14
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: На весь экран - пропорции

Для макос должен пример для линукса подойти.
__________________
(Offline)
 
Ответить с цитированием
Старый 25.07.2011, 12:01   #15
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,374
Написано 2,478 полезных сообщений
(для 6,866 пользователей)
Ответ: На весь экран - пропорции

Сообщение от xmarat Посмотреть сообщение
Не знал что так можно. Полезная вещь, буду знать. А как можно узнать размер дисплея в MacOS?
?Win32
    Import pub
.win32
    
Private
    
Extern
        
Function ReleaseDC(hwnd:Int, hdc:Int)"Win32" 
    
End Extern
    
Public
?
MacOS
    Import 
"macscreen.c"
    
Private
    
Extern
        
Function CGDisplayCurrentMode:Byte Ptr(displayID:Byte Ptr)"MacOS"
        
Function CGGetActiveDisplayList:Byte Ptr(kMaxDisplays:Int, display:Byte Ptr, numDisplays:Int Var)"MacOS"
        
Function MACOS_GetWidth:Int(mode:Byte Ptr)"C"
        
Function MACOS_GetHeight:Int(mode:Byte Ptr)"C"
        
Function MACOS_GetBPP:Int(mode:Byte Ptr)"C"
        
Function MACOS_GetHertz:Int(mode:Byte Ptr)"C"
    
End Extern 
    
Public
?
Linux
    Import brl
.graphics
?

Function 
GetDesktopMode:Int (width:Int Var, height:Int Var, depth:Int Var, hertz:Int Var)
    ?
win32
        Local hwnd
:Int = GetDesktopWindow()
        
Local hdc:Int = GetDC(hwnd)
        If 
hdc = Null Then Return -1
        width  
= GetDeviceCaps(hdc, HORZRES)
        
height = GetDeviceCaps(hdc, VERTRES)
        
depth  = GetDeviceCaps(hdc, BITSPIXEL)
        
hertz  = GetDeviceCaps(hdc, VREFRESH)
        
ReleaseDC(hwnd,hdc)
    ?
MacOS
        Local display
:Byte Ptr[] = New Byte Ptr[1]
        
Local iMode:Byte Ptr = Null
        Local iCount
:Int
        CGGetActiveDisplayList 1
, display, iCount
        iMode  
= CGDisplayCurrentMode(display[0])
        
width  = MACOS_GetWidth(iMode)
        
height = MACOS_GetHeight(iMode)
        
depth  = MACOS_GetBPP(iMode)
        
hertz  = MACOS_GetHertz(iMode)
    ?
Linux
        CountGraphicsModes
()
        
GetGraphicsMode (0,width,height,depth,hertz)
    ?
End Function

' Получать так : '
Local desktopWidth:Int, desktopHeight:Int, desktopDepth:Int, desktopHertz:Int
GetDesktopMode
(desktopWidth, desktopHeight, desktopDepth, desktopHertz)
Graphics(desktopWidth, desktopHeight, desktopDepth, desktopHertz) 
__________________
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

Последний раз редактировалось Randomize, 25.07.2011 в 15:16.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
impersonalis (25.07.2011), Tadeus (25.07.2011), xmarat (25.07.2011), Жека (25.07.2011)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com