Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - MJay

Strony: [1] 2 3
1
Unity 3D / Odp: Płynny ruch AI
« dnia: Lipiec 02, 2013, 01:04:24 »
Optymalizacja, piszę grę na zlecenie na tablety, chcę aby kod był jak najbardziej zoptymalizowany, aby nie powstały żadne dławienia. Gra sama w sobie wykorzystuje już wiele obiektów. Jeszcze się nagłowię do czwartku, ewentualnie napiszę swoje funkcje fizyczne.
Ok. Dzięki wszystkim za pomoc. Dobrej nocy.

2
Unity 3D / Odp: Płynny ruch AI
« dnia: Lipiec 01, 2013, 21:45:33 »
W sensie poprzez równania matematyczne? Tak miałem wcześniej, ale nie mogłem osiągnąć tej płynności co przez użycie siły. Mogę ewentualnie jeszcze zrobić tak, że wygaszam prędkość w którą leci obiekt zastępując ją rosnącą prędkościa w kierunku celu.
Ok, ale to wyjście ewakuacyjne ( bo to dokładnie to co powinna robić siła ) jeśli da się za pomocą siły, to proszę o pomoc ;-)

3
Unity 3D / Odp: Płynny ruch AI
« dnia: Lipiec 01, 2013, 20:59:44 »
Chcę uzyskać efekt latania obiektu w lewo i prawo na planszy 2D, ale nie chcę żeby się poruszało tylko po jednej linii, a żeby zmieniało wysokość.
Wygląda na to, że na mój obiekt ciągle oddziałują siły, nawet jeśli w else'ie ustawiana jest prędkość na sztywno, to siła jest zapamiętana i w kolejnym punkcie gdy dochodzi do zmiany kierunku, dodawane są nowe siły, które najwidoczniej nie redukują całkowicie tamtych wcześniejszych..

Istnieje jakiś sposób na zresetowanie sił które oddziałują na obiekt? Gógl nic nie wie na ten temat.
Tu widzę gościa który miał ten sam problem 3 lata temu http://forum.unity3d.com/threads/39998-reset-rigidbody

4
Unity 3D / Odp: Płynny ruch AI
« dnia: Lipiec 01, 2013, 13:34:14 »
Tzn tak. Mój kod wygląda tak:
var _points     : GameObject[];
var _dst        : int;
var _maxSpeed   : float;
var _go         : boolean;
var _direction : Vector3;

function Start () {
        _points = GameObject.FindGameObjectsWithTag( "Point" );
        _dst = 0;
        _direction = moveDirection( gameObject, _points[ _dst ].transform.position );
        _maxSpeed = 5;
}

function FixedUpdate () {
                MovePiranha( gameObject, _points[ _dst ].transform.position );
}

function MovePiranha( thisObject : GameObject, destination : Vector3 ) {
        if( Mathf.Abs( thisObject.rigidbody.velocity.magnitude - _maxSpeed ) > 0.01 || _go ) {
                thisObject.rigidbody.AddForce( _direction * _maxSpeed, ForceMode.Acceleration );
                _go = false;
        } else {
        thisObject.rigidbody.velocity = moveDirection( thisObject, destination ) * _maxSpeed;
        }
       
        //Sprawdzenie czy obiekt dotarł do celu
        if( Mathf.Abs( ( destination - thisObject.transform.position ).magnitude ) < ( Time.deltaTime * _maxSpeed ) ) {
                _direction = -_direction + moveDirection( gameObject, _points[ ++_dst ].transform.position );
                _go = true;             
        }
       
        Debug.Log( thisObject.rigidbody.velocity.magnitude );
}

function moveDirection( thisObject : GameObject, destination : Vector3 ) {
//Wyliczenie kierunku lotu obiektu
        var direction = destination - thisObject.transform.position;
        direction.Normalize( );
       
        return direction;
}

Działa tak jak chcę, żeby działało, ale nie trafia w punkt. Potrzebuję uwzględnić korektę lotu.

//Edit + CodeEdit
Dodałem korekcję lotu i działa niby, ale płynnie to wygląda tylko dla pierwszego punktu..

5
Unity 3D / Płynny ruch AI
« dnia: Lipiec 01, 2013, 13:12:38 »
Hey.
Mam prośbę, ponieważ potrzebuję wykminić jak zrobić płynny ruch postaci, która lata sobie między jednym waypointem a innym.
Chcę aby to wyglądało płynnie dlatego używam sił do poruszania obiektem a nie zwykłych obliczeń matematycznych.

Chcę osiągnąć coś takiego ( zdjęcie ). Te narysowane to są wektory prędkości. Jak teraz dobrać siłę aby coś takiego osiągnąć?
Próbując ciągle otrzymuję rezultat, że obraca się obiekt wokół punktu jak asteroida wokół Słońca. Bo siła jest wyliczana z każdego kolejnego punktu tak, aby leciała prosto do punktu.

6
DirectX / Odp: Tutorial z SDK, nie jest w pełni zrozumiały
« dnia: Maj 21, 2012, 12:56:38 »
Rzeczywiście, to w ten sposób odpowiedziałeś mi też na drugie pytanie.
Ale czy takie coś nie powinno obrać zatem światem, jeśli nie czyszczę macierzy m_World?
D3DXMatrixRotationZ( &mSpin, -0.3f );
D3DXMatrixMultiply( &m_World, &m_World, &mSpin );
macierz mSpin wyglądałaby teraz tak:
cos(-0.3) -sin(-0.3)  0
sin(-0.3)   cos(0.3)  0
    0         0       1
i mnożę obróconą macierz świata o tą macierz obrotu, a jednak cały czas się utrzymuje w lekko obróconej pozycji.

Chętnie przeczytałbym jakiś artykuł o tym, bo w dokumentacji DirectX nie widzę odpowiedzi na to pytanie.

7
DirectX / Odp: Tutorial z SDK, nie jest w pełni zrozumiały
« dnia: Maj 21, 2012, 11:58:42 »
Dzięki mihu za odpowiedź.

1. Tak myślałem właśnie ;]
2. Nie ważne, już i tak chyba to pojąłem. ( TLDR = too long, didn't read ? )
3. Ale właśnie o to mi chodzi, bo mam m_World która jest jednostkową macierzą. Dokonując przekształcenia tak jak zauważyłeś D3DXMatrixRotationY( &m_World, Angle ) ona przestaje być jednostkową, zatem później jak zwiększam kąt i znowu obracam, to obracam już obróconą macierz o większy kąt, a tak się nie dzieje, bo jeśli dodam D3DXMatrixIdentity( &m_World ) na początku funkcji Render, to wynik jest dokładnie taki sam. Nie chodzi mi o nadpisywanie wartości macierzy w shaderze w tym momencie, bo to czaję.
Chodzi mi tylko o to, czy Macierz m_World jest po zakończonej funkcji Render ustawiana domyślnie na jednostkową spowrotem?

Pozdrawiam,
MJay.

8
DirectX / Tutorial z SDK, nie jest w pełni zrozumiały
« dnia: Maj 20, 2012, 20:50:31 »
Trochę mnie denerwuje, że muszę uciekać się do forum i robić z siebie strasznego laika, ale to są tak trywialne rzeczy, że myślę, że bez problemu udzielicie mi odpowiedzi bez większego zagłębiania się w mechanizm DirectX'a.

1. Może zacznę od tego, że w 5 tutorialu który znajduje się w dokumentacji DirectX'a którą każdy ma na dysku, jest tworzone dwie macierze świata. World1 i World2. To trochę bez sensu prawda? Przecież zamiast robić tak:
void D3DClass::Render( )
{
    float ClearColor[ 4 ] = { 0.0f, 0.125f, 0.3f, 1.0f };
    m_pd3dDevice->ClearRenderTargetView( m_pRenderTargetView, ClearColor );
    m_pd3dDevice->ClearDepthStencilView( m_pDepthStencilView, D3D10_CLEAR_DEPTH, 1.0f, 0 );

    static float Angle = 0.0f;
    Angle += 0.0001f;
    if( Angle >= 360.0f )
Angle = 0.0f;

    D3DXMATRIX mTranslate;
    D3DXMATRIX mOrbit;
    D3DXMATRIX mSpin;
    D3DXMATRIX mScale;
    D3DXMatrixRotationZ( &mSpin, -Angle );
    D3DXMatrixRotationY( &mOrbit, -Angle*2.0f );
    D3DXMatrixTranslation( &mTranslate, -4.0f, 0.0f, 0.0f );
    D3DXMatrixScaling( &mScale, 0.3f, 0.3f, 0.3f );

    D3DXMatrixMultiply( &m_World2, &mScale, &mSpin );
    D3DXMatrixMultiply( &m_World2, &m_World2, &mTranslate );
    D3DXMatrixMultiply( &m_World2, &m_World2, &mOrbit );


    D3DXMatrixRotationY( &m_World, Angle );

    m_pWorld->SetMatrix( ( float* )&m_World );
    m_pView->SetMatrix( ( float* )&m_View );
    m_pProjection->SetMatrix( ( float* )&m_Projection );

    D3D10_TECHNIQUE_DESC techDesc;
    m_pTechnique->GetDesc( &techDesc );
    for( int i = 0; i < techDesc.Passes; ++i )
    {
m_pTechnique->GetPassByIndex( i )->Apply( 0 );
m_pd3dDevice->DrawIndexed( 36, 0, 0 );
    }

    m_pWorld->SetMatrix( ( float* )&m_World2 );
    for( int i = 0; i < techDesc.Passes; ++i )
    {
m_pTechnique->GetPassByIndex( i )->Apply( 0 );
m_pd3dDevice->DrawIndexed( 36, 0, 0 );
    }

    m_pSwapChain->Present( 0, 0 );
}
Można zrobić tak i daje to ten sam efekt:
void D3DClass::Render( )
{
    float ClearColor[ 4 ] = { 0.0f, 0.125f, 0.3f, 1.0f };
    m_pd3dDevice->ClearRenderTargetView( m_pRenderTargetView, ClearColor );
    m_pd3dDevice->ClearDepthStencilView( m_pDepthStencilView, D3D10_CLEAR_DEPTH, 1.0f, 0 );

    static float Angle = 0.0f;
    Angle += 0.0001f;
    if( Angle >= 360.0f )
Angle = 0.0f;
    D3DXMATRIX mTranslate;
    D3DXMATRIX mOrbit;
    D3DXMATRIX mSpin;
    D3DXMATRIX mScale;
    D3DXMatrixRotationZ( &mSpin, -Angle );
    D3DXMatrixRotationY( &mOrbit, -Angle*2.0f );
    D3DXMatrixTranslation( &mTranslate, -4.0f, 0.0f, 0.0f );
    D3DXMatrixScaling( &mScale, 0.3f, 0.3f, 0.3f );

    //Z tąd znikają przekształcenia dotyczące World2
   
    D3DXMatrixRotationY( &m_World, Angle );

    m_pWorld->SetMatrix( ( float* )&m_World );
    m_pView->SetMatrix( ( float* )&m_View );
    m_pProjection->SetMatrix( ( float* )&m_Projection );

    D3D10_TECHNIQUE_DESC techDesc;
    m_pTechnique->GetDesc( &techDesc );
    for( int i = 0; i < techDesc.Passes; ++i )
    {
m_pTechnique->GetPassByIndex( i )->Apply( 0 );
m_pd3dDevice->DrawIndexed( 36, 0, 0 );
    }

    //Wstawiane zostają tutaj i przekształcenia są wykonywane na World
    D3DXMatrixMultiply( &m_World, &mScale, &mSpin );
    D3DXMatrixMultiply( &m_World, &m_World, &mTranslate );
    D3DXMatrixMultiply( &m_World, &m_World, &mOrbit );

    m_pWorld->SetMatrix( ( float* )&m_World );
    for( int i = 0; i < techDesc.Passes; ++i )
    {
    m_pTechnique->GetPassByIndex( i )->Apply( 0 );
m_pd3dDevice->DrawIndexed( 36, 0, 0 );
    }

    m_pSwapChain->Present( 0, 0 );
}
Poprawcie mnie jeśli się mylę, byćmoże jest w tym wszystkim jakieś drugie dno?

2. Otóż jak wiadomo, kolejność mnożenia macierzy ma znaczenie, dlatego dziwi mnie jedna rzecz. W funkcji Render ( tej drugiej ) wykonuje się od początku obrócenie macierzy świata o kąt Angle, macierz World jest już zmodyfikowana. Dajmy na to, że w tym momencie robię macierz jednostkową i rysuję drugi szescian obok
    D3DXMatrixIdentity( &m_World );
    D3DXMatrixMultiply( &m_World, &m_World, &mOrbit );
    D3DXMatrixMultiply( &m_World, &m_World, &mTranslate );
W tym momencie są obok siebie dwa sześciany o jednakowych i się kręcą wokół własnych osi, co mnie strasznie dziwi, bo wykonuję najpierw obrót macierzy a potem przesunięcie o -4 jednostki względem osi OX. Czyli moim zdaniem powinien się kręcić jeden sześcian dookoła drugiego, co następuję kiedy jest mnożenie odwrotne:
    D3DXMatrixIdentity( &m_World );
    D3DXMatrixMultiply( &m_World, &m_World, &mTranslate );
    D3DXMatrixMultiply( &m_World, &m_World, &mOrbit );
Ale w tym miejscu wykonuję najpierw przesunięcie, czyli środek macierzy świata jest w punkcie -4, 0, 0 i wtedy dochodzi do obrotu, czyli powinno się zakręcić wokół własnej osi.
Mógłby ktoś mi pomóc wyjaśnić tą ciekawą zagadkę.
Domyślam się, że to poprostu jest tak, ze środek świata zostaje cały czas w punkcie 0, 0, 0 dlatego przy rotacji kiedy najpierw zaszło przesunięcie obiekt obiega drugi dookoła, ale jest to nieintuicyjne.

3. Czy po zakończeniu funkcji Render macierz świata jest domyślnie zmieniana spowrotem na jednostkową? Pytam, bo zauważyłem, że nie ma różnicy, czy wstawię D3DXMatrixIdentity( &m_World ) na początku funkcji Render, czy też nie.

Z góry dzięki, za wszystkie odpowiedzi ;]

9
DirectX / Odp: Podczas tworzenia Effectu wywala mi błąd
« dnia: Maj 17, 2012, 11:06:46 »
Dzięki hashdone, powyświetlało mi błędy, w funkcjach set...Shader miałem małą literę tam gdzie powinno być Set ;] Jednak nie był żywcem przepisany kod.
Nie wyświetla mi klocka tak jak w przykładzie, czyli jeszcze gdzieś są błędy w vertexach lub w indeksowaniu, ale to już inna sprawa.

Dzięki wielkie i pozdrawiam ;]

10
DirectX / Odp: Podczas tworzenia Effectu wywala mi błąd
« dnia: Maj 17, 2012, 10:47:27 »
Uczę się z tutoriala który był w SDK. Najpierw wydrukowałem sobie kod i go czytałem parę razy, czytałem co pokolei która funkcja robi. Dodatkowo, czytam książkę "Introducing to DirectX 10" aby wszystko jakoś lepiej załapać i czytam dokumentację z MSDN.
W kompilatorze oprócz tego, że nie udało się znaleźć lub otworzyć PDB file. Wyskakuje mi tylko, że program zakończył się wyjściem o kodzie 0. Czyli wszystko wporządku.

do ppErrors przekazuję NULL, bo tak jest w przykładzie, ale zainteresowałem się tym co powiedziałeś. Więc dodałem taki kod:
ID3D10Blob* compilationErrors = 0;
// Tworzenie Effectu
DWORD shaderFlags = D3D10_SHADER_ENABLE_STRICTNESS | D3D10_SHADER_DEBUG;
hr = D3DX10CreateEffectFromFile( L"shader.fx",
NULL,
NULL,
"fx_4_0",
shaderFlags,
0,
g_pd3dDevice,
NULL,
NULL,
&g_pEffect,
&compilationErrors,
NULL );
if( FAILED( hr ) )
{
if( compilationErrors )
{
MessageBox( NULL, ( LPCWSTR )compilationErrors->GetBufferPointer(), 0, 0 );
ReleaseCOM( compilationErrors );
}
FatalERROR( L"Nie udało się utworzyć obiektu pEffect" );
}
Niestety wyskakują w MessageBoxie tylko jakieś chińskie ślaczki, więc niewiele mi to ułatwiło ;-)

EDIT:
Dodam jeszcze, że ReleaseCOM, to makro
ReleaseCOM( x ) \
{ \
     x->Release(); \
     x = 0; \
}

a FatalERROR, to marko
FatalERROR( x ) \
{ \
     MessageBox( NULL, x, L"Error!", MB_OK ); \
     return false; \
}

11
DirectX / Podczas tworzenia Effectu wywala mi błąd
« dnia: Maj 17, 2012, 00:27:53 »
Witam.
Nie mam pojęcia w czym jest błąd, kiedy kompiluję przykład z próbek z SDK DirectX10 wszystko działa jak należy, ale kiedy przepisuję przykład, coś jest nie tak. Kod wpisuję taki:
DWORD shaderFlags = D3D10_SHADER_ENABLE_STRICTNESS | D3D10_SHADER_DEBUG;
hr = D3DX10CreateEffectFromFile( L"shader.fx",
NULL,
NULL,
"fx_4_0",
shaderFlags,
0,
g_pd3dDevice,
NULL,
NULL,
&g_pEffect,
NULL,
NULL );
if( FAILED( hr ) )
FatalERROR( L"Nie udało się utworzyć obiektu pEffect" );
Niestety podczas startu programu wywala mi błąd, iż nie udało się utworzyć obiektu pEffect. Czym może to być spowodowane? shader.fx to jest z żywca przepisany kod z przykładu.

Z góry dzięki za pomoc,
pozdrawiam.

PS: Dodam jeszcze, że plik shader.fx już wkleiłem do wszystkich folderów w celu sprawdzenia, czy program nie może się odwołać do pliku, po kompilacji. Ale nic z tego.

12
OpenGL / Odp: Korzystanie z bitmap w OpenGL 3.0+
« dnia: Listopad 11, 2011, 04:29:28 »
void SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin, GLfloat zMax)
{
m3dMakeOrthographicMatrix(projMatrix, xMin, xMax, yMin, yMax, zMin, zMax);
projMatrix[15] = 1.0f;


// Fill in values for untransformed Frustum corners
            // Near Upper Left
            nearUL[0] = xMin; nearUL[1] = yMax; nearUL[2] = zMin; nearUL[3] = 1.0f;

            // Near Lower Left
            nearLL[0] = xMin; nearLL[1] = yMin; nearLL[2] = zMin; nearLL[3] = 1.0f;

            // Near Upper Right
            nearUR[0] = xMax; nearUR[1] = yMax; nearUR[2] = zMin; nearUR[3] = 1.0f;

            // Near Lower Right
            nearLR[0] = xMax; nearLR[1] = yMin; nearLR[2] = zMin; nearLR[3] = 1.0f;

            // Far Upper Left
            farUL[0] = xMin; farUL[1] = yMax; farUL[2] = zMax; farUL[3] = 1.0f;

            // Far Lower Left
            farLL[0] = xMin; farLL[1] = yMin; farLL[2] = zMax; farLL[3] = 1.0f;

            // Far Upper Right
            farUR[0] = xMax; farUR[1] = yMax; farUR[2] = zMax; farUR[3] = 1.0f;

            // Far Lower Right
            farLR[0] = xMax; farLR[1] = yMin; farLR[2] = zMax; farLR[3] = 1.0f;
}
const M3DMatrix44f& GetProjectionMatrix(void) { return projMatrix; }inline void LoadMatrix(const M3DMatrix44f mMatrix) {
m3dCopyMatrix44(pStack[stackPointer], mMatrix);
}

13
OpenGL / Korzystanie z bitmap w OpenGL 3.0+
« dnia: Listopad 10, 2011, 20:12:29 »
Problem polega na tym, że w momencie gdy podstawiam funkcje ze starej wersji OpenGL to bitmapy wyświetla pięknie, natomiast kiedy ustawiam macierz rzutowania na Ortographic nowym stylem, to obraz okna jest pusty. Jak z tym sobie poradzić?
Tutaj zamieszczam kod:
#include <GLTools.h>
#include <GLFrame.h>
#include <GLFrustum.h>
#include <GLMatrixStack.h>
#include <GLGeometryTransform.h>
#define FREEGLUT_STATIC
#include <GL/glut.h>

GLGeometryTransform transformPipeline;
GLMatrixStack modelViewMatrix;
GLMatrixStack projectionMatrix;
GLFrustum viewFrustum;
GLFrame cameraFrame;
GLShaderManager shaderManager;

void ChangeSize(int iWidth, int iHeight)
{
glViewport(0, 0, iWidth, iHeight);

viewFrustum.SetOrthographic(0.0f, float(iWidth - 1), 0.0f, float(iHeight - 1), -1.0f, 1.0f);
projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());
transformPipeline.SetMatrixStacks(modelViewMatrix, projectionMatrix);
/*
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glOrtho(0.0, iWidth - 1.0, 0.0, iHeight - 1.0, -1.0, 1.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); */
}

void SetupRC()
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

shaderManager.InitializeStockShaders();
}

void RenderScene()
{
unsigned char LetterA[] = { 0xC0, 0x03,
0xC0, 0x03,
0xC0, 0x03,
0xC0, 0x03,
0xC0, 0x03,
0xDF, 0xFB,
0x7F, 0xFE,
0x30, 0x0C,
0x30, 0x0C,
0x18, 0x18,
0x18, 0x18,
0x0C, 0x30,
0x0C, 0x30,
0x07, 0xE0,
0x07, 0xE0 };

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

modelViewMatrix.PushMatrix();
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

float White [] = { 1.0f, 1.0f, 1.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, White); // lub GLT_SHADER_FLAT
//glColor3f(1.0f, 1.0f, 1.0f);

for(int numA = 0; numA < 40; ++numA)
{
glRasterPos2i(rand() % 800, rand() % 600);
glBitmap(16, 16, 0.0f, 0.0f, 0.0f, 0.0f, LetterA);
}
modelViewMatrix.PopMatrix();

glutSwapBuffers();
}

int main(int argc, char* argv[])
    {
gltSetWorkingDirectory(argv[0]);

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(800,600);
 
    glutCreateWindow("OpenGL Bitmap");
 
    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);
   
    GLenum err = glewInit();
    if (GLEW_OK != err) {
        fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
        return 1;
        }
       

    SetupRC();
    glutMainLoop();   
    return 0;
    }

14
Projekty rozpoczęte / Odp: Arkanoid
« dnia: Wrzesień 27, 2011, 21:46:57 »
@MJay: powinieneś sprawdzić, czy nie zachodzi sytuacja, że kolizja z jednym klockiem wykrywana jest dwa razy, przez co kierunek piłki w rezultacie się nie zmienia. Mi taki błąd często się zdarza jeśli chodzi o fizykę ;)
Fakt, nie bez powodu funkcje kolizji zwracają u mnie wartość bool, po kolizji nie warto sprawdzać następnych. Dzięki

EDIT: Jednak dalej to samo. Tylko te dwa klocki sprawiają problem.. Nie mam pojęcia jak może dojść do kolizji 2x tego samego klocka, sprawdzam podczas renderowania każdy klocek z osobna i tylko raz

15
Projekty rozpoczęte / Odp: Arkanoid
« dnia: Wrzesień 27, 2011, 09:42:32 »
Do sterowania wykorzystałem funkcje dostępne przez GLTools dlatego jest sterowanie jakie jest, czyli ma opóźnienie przy wciśnięciu ;-) Fakt jeżeli zmienię na mysz, to nie powinno być problemów.

Jeszcze nie rozumiem tylko jednej rzeczy w moim programie. Sprawdzam kolizję piłki z każdym blokiem kiedy go rysuje. I wszystkie bloki elegancko wykrywają kolizję, a dwa pierwsze w górnym rzędzie niestety nie, mimo, że zabija klocka to nie zmienia kierunku piłki, a w funkcji najpierw powinno zmienić kierunek a potem dopiero zabić klocka.
Bloków nie wstawiam na sztywno w określone współrzędne tylko funkcja mi je ustawia dynamicznie i dla każdego klocka sprawdza kolizję w zależności od jego współrzędnych.

Strony: [1] 2 3